一、列表、元組
1、常用操作函數
1 #Author:CGQ
2 import copy
3 #列表
4 '''
5 names=["ZhangYang","XiaoHei","XiaoHei","LiSan"]
6 print(names[0])#某一個
7 #切片
8 print(names[1:3])
9 print(names[0:-1:2])#2代表步長
10 print(names[-1])
11 print(names[-2:])
12 len(names)#字符串長度
13 print(names[names.index("ZhangYang")])#輸出原文和位置信息
14 names.append("DaKaiZi")#追加最後
15 names.insert(1,"GuYun")#追加到某位置
16 names.extend("GuYun")#迭代添加
17 names[2] = "XieDi"#替換
18 names[:2] = "ni"
19 names[:2] = "ni43243"#迭代替換
20 names[:2] = [4,3,2,4,3]#迭代替換
21 #刪除
22 names.remove("XieDi")#按元素刪
23 del names[2]#按序號刪
24 del names#刪除names
25 names.pop(2)#按序號刪
26 n1 = names.pop(2)#刪除並返回刪除值(默認刪除最後一個)
27 names.clear()#清空
28 names.reverse()#反轉
29 names.sort()#排序(字母順序,符號》數字》大寫》小寫)
30 names.sort(reverse=True)#反向排序(字母順序,符號》數字》大寫》小寫)
31 names2=[1,2,3,4]
32 names.extend(names2)#鏈接
33 del names2#刪變量
34 '''
35 '''
36 names=["ZhangYang","XiaoHei",["CGQ","DaWang"],"XiaoHei","LiSan"]
37 #複製第一層
38 #names2=names.copy()
39 #names2=names[:]
40 #names2=list(names)
41 #names2=names#指針指向name2,沒有新建(針對列表,字符、字符串是新建【真正的複製】)
42 names2=copy.deepcopy(names)#完全複製
43 names[2][0]="cgq"
44 #print(names,names2)
45 for i in names:
46 print(i)
47 '''
48 #元組
49 # name=("LiSi","WangWu")#不能修改
50 # print(name.index("LiSi"))
51
52 NAME = (1,2,[1,'SDFAS'],'jgjhgj')#其中列表可以修改
53 # NAME[2][1] = NAME[2][1].lower()
54 # print(NAME)
55
56 # s = 'safsadf'
57 # s1 = '_'.join(s)#用'_'相連接,返回字符串
58 # print(s1)
59 #range [......1,2,3........]
60 # for i in range(-20,20,2):
61 # print(i)
#列表和元組、字典都可以解包
a,b=(1,2)
print(a,b)
a,b=['1','2']
print(a,b)
2、循環
1 #Author:CGQ
2 #刪除奇數位元素
3 lis = [11, 22, 33, 44, 55, 6, 7, 8, 9]
4 #方法一
5 # count = 0
6 # for i in lis:
7 # if count%2 == 1:
8 # print(lis.index(i))
9 # del lis[lis.index(i)]
10 # count-=1
11 # count+=1
12 #方法二
13 lis1 = []
14 for i in range(len(lis)):#len[lis]#整個循環中其值不變,爲9
15 if i%2 == 1:
16 lis1.append(lis[i])
17 i = len(lis1)
18 cont = 0
19 while i-cont:
20 lis.remove(lis1[cont])
21 cont+=1
22 print(lis)
列表在循環時如果進行刪除/增加操作,循環中列表元素也會減少/增加
二、字典
1、常用操作函數
#Author:CGQ
#key-value
#版本3.6以後dica字典是有序的
info={
'123456':"Ren Gong",
'123457':"Luan Gong",
'123458':"Xiao Gong",
}
info_a={
'123456':"Ren",
'1':"Luan",
'12':"Gong",
}
#b=dict.fromkeys([6,7,8],"test")#創建一個新的字典,但其中的3個test其實是一個(同一地址)
#info.update(info_a)#更新info,沒有的添加,有的修改
#print(info.items())#把字典轉換成列表
#循環
for i in info.values():#打印value
print(i)
for i in info:#高效(與for i in inf.keys()一樣)
print(i,info[i])
for k,v in info.items():#轉換成列表後循環
print(k,v)
'''
print(info)
#print(info['123456'])#提取索引爲123456的數據
#修改或添加
info['123456']="人工"#增加(字典中無該key)
info.setdefault('12345610','afasd')#增加(如果有該key,不做任何操作)
info['123459']="大河"#修改(字典中有該key)
#del info['123456']#刪除該條數據
#info.pop("123456")#刪除該條數據,有返回值
print(info.pop('1234561321','沒有此數據'))#如沒有該key,則返回'沒有此數據'
#info.popitem()#隨機刪一條數據,返回刪除數據(元組)
#info.clear()#清空字典
print(info.get('12345'))#安全的查找方法,查不到輸出None
print(info.get('12345','沒有'))#安全的查找方法,查不到輸出 沒有
print(info)
print('12345' in info)#找到輸出true,找不到輸出false
#info.has_key("1103")2.x版本的寫法^上
'''
''''''
#del info#刪除變量
av_catalog = {
"歐美":{
"www.youporn.com": ["很多免費的,世界最大的","質量一般"],
"www.pornhub.com": ["很多免費的,也很大","質量比yourporn高點"],
"letmedothistoyou.com": ["多是自拍,高質量圖片很多","資源不多,更新慢"],
"x-art.com":["質量很高,真的很高","全部收費,屌比請繞過"]
},
"日韓":{
"tokyo-hot":["質量怎樣不清楚,個人已經不喜歡日韓範了","聽說是收費的"]
},
"大陸":{
"1024":["全部免費,真好,好人一生平安","服務器在國外,慢"]
}
}
av_catalog["大陸"]["1024"][1]="可以在國內做鏡像"
print(av_catalog.values())#打印除values所有的值
print(av_catalog.keys())#打印所有的keys值
print(av_catalog.items())#打印所有的keys,values值
av_catalog.setdefault("臺灣",{"www":["watifak",2]})
print(av_catalog)
# = 賦值 == 比較值是否相等 is 比較,比較的是內存地址 id(內存地址的內容)
li1 = [1,2,3]
li2 = li1
li3 = li2
print(id(li1),id(li2))#指向同一個內存地址
#數字,字符串 小數據池
#數字的範圍 -5 -- 256
#字符串:1,不能有特殊字符
# 2,s(一個字符)*20 還是同一個地址,s*21以後都是兩個地址
# i1 = 6
# i2 = 6
# print(id(i1),id(i2))#指向同一個內存地址
# i1 = 300
# i2 = 300
# print(id(i1),id(i2))#指向同一個內存地址
#剩下的 list dict tuple set
# l1 = [1,]
# l2 = [1,]
# print(l1 is l2)#指向非同一個內存地址
# s = 'alex'
# s1 = b'alex'
# print(s,type(s))
# print(s1,type(s1))
# s = '中國'
# print(s,type(s))
# s1 = b'中國'
# print(s1,type(s1))
s1 = 'alex'
# encode 編碼,如何將str --> bytes, ()
s11 = s1.encode('utf-8')
s11 = s1.encode('gbk')
print(s11)
s2 = '中國'
s22 = s2.encode('utf-8')
s22 = s2.encode('gbk')
print(s22)
2、循環
1 刪除帶k的元素
2 dic = {'k1':'v1','k2':'v2','a3':'v3'}
3 #方法一
4 # dic1 = {}
5 # for i in dic:
6 # if 'k' not in i:
7 # dic1.setdefault(i,dic[i])
8 # dic = dic1
9 # print(dic)
10 方法二
11 l = []
12 for i in dic:
13 if 'k' in i:
14 l.append(i)
15 for i in l:
16 del dic[i]
17 print(dic)
字典在循環時不可進行刪除操作,用上述方法進行刪除
三、集合
#Author:CGQ
'''
集合:可變的數據類型,他裏面的元素必須是不可變的數據類型,無序,不重複。
{}
'''
# set1 = set({1,2,3})
# set1 = {'alex','wusir','ritian','egon','barry',}
# set2 = {1,2,3,[2,3],{'name':'alex'}} # 錯的
lieXi_1=[3,2,2,9]
lieXi_2=set([0,36,3,99])
lieXi_1=set(lieXi_1)
print(lieXi_1,type(lieXi_1))
#交集
print(lieXi_1 & lieXi_2)
print(lieXi_1.intersection(lieXi_2))
#並集
print(lieXi_1 | lieXi_2)
print(lieXi_1.union(lieXi_2))
#lieXi_1-lieXi_2(差)
print(lieXi_1 - lieXi_2)
print(lieXi_1.difference(lieXi_2))
#子集(是否包含)
print(lieXi_1.issubset(lieXi_2))
#是否被包含
print(lieXi_1.issuperset(lieXi_2))
#對稱差集(並集-交集)
print(lieXi_1 ^ lieXi_2)
print(lieXi_1.symmetric_difference(lieXi_2))
lieXi_1.add(98)#添加
lieXi_1.update([111,416])#添加多個
lieXi_1.remove(98)#刪除
print(len(lieXi_1))#長度
print(98 in lieXi_1)#測試98是否是lieXi_1的成員
#print(lieXi_1.pop())#隨機刪除並返回刪除值
print(lieXi_1.discard('KJ'))#刪除指定值,沒有返回None(不報錯),成功無提示
#{} set()
# set1.clear()
# print(set1) # set()
# del set1#直接刪除變量
# print(set1)#已刪除此集合
#查
# for i in set1:
#將集合(set)類型轉換爲frozenset類型;由不可變類型轉化爲可變類型
s1 = {1, 2, 3}
print(s1,type(s1))
s = frozenset(s1)
print(s,type(s))