數據類型的補充:數組
1,元組: 元組裏面若是隻有一個元素且沒逗號,則該數據的數據類型與裏面的元素相同。 tu1 = ([1,2,3]) tu2 = ([1,2,3],) print(tu1,type(tu1) 無逗號列表 #[1, 2, 3]
print(tu2,type(tu2)) 有逗號元組 #([1, 2, 3],) 2,list 列表 l1 = [111,222,333,444,555,] 索引爲奇數對應的全部元素所有刪除。 方法一: del l1[1::2] print(l1) 方法二:錯誤展現 for index in range(len(l1)): print('刪除以前的index:%s' % index) print('刪除以前的l1:%s' % l1) if index % 2 == 1: del l1[index] print('刪除以後的index:%s' % index) print('刪除以後的l1:%s' % l1) print(l1) 在循環一個列表時,最好不要改變列表的大小,會影響你的最終結果。 方法三: 倒着循環: l1 = [111,222,333,444,555,] for index in range(len(l1)-1,-1,-1): if index % 2 == 1: del l1 [index] print(l1)
刪除整個列表:
lst = ["倚天屠龍記", "誅仙", "看見", "追風箏的人"] clear() lst.clear() print(lst) # 有問題
for i in lst: lst.remove(i) print(lst) for i in lst:# for在這裏的意義是記錄刪除的次數
del lst[0] # 不正確
print(lst) lst = ["倚天屠龍記", "誅仙", "看見", "追風箏的人"] # 正確
for i in range(0, len(lst)): lst.pop() print(lst) # 把要刪除的東西保存在一個新列表中
new_lst = [] for el in lst: new_lst.append(el) # 循環新列表. 刪除老列表
for e in new_lst: lst.remove(e) print(lst)
dict字典: fromkeys用法:
dic = dict.fromkeys('abc',666) print(dic) { 'a':666, 'b' : 666, 'c' : 666 } dic = dict.fromkeys([1,2,3],[ ]) dic[1].append(666) print(dic) { 1 : [666], 2 : [666] , 3 : [666] }
在循環dict中,最好不要改變dict的大小,會影響結果或者報錯。
dic = {'k1':'v1','k2':'v2','k3':'v3','name':'alex'} for i in dic: if 'k' in i: del dic[i] # (報錯)
dic = {'k1':'v1' , 'k2':'v2' , 'k3':'v3' , 'name':'alex'} l1 = [ ] for key in dic: if 'k' in key: l1.append(key) # print(l1) ['k1' , 'k2' , 'k3' ]
for key in l1: del dic[key] print(dic) #{'name' : 'alex'}
把第一個參數中的每一項拿出來和第二個參數組成一個鍵值對
生成出來的鍵指向的value是同一個對象. 改變其中一個的時候. 另外一個也會跟着改變
dic = dict.fromkeys(["jay", "jj"], ["周杰倫", "林俊杰"]) dic['jay'].append("蔡依林") print(dic) 打印出來的是空: dic = {} dic.fromkeys(["葫蘆娃", "蛇精"], ["馮提莫", "陳一發"]) print(dic) # 什麼都不打印.
dic = {"韓哥":"發圖不留種", "奎峯":"鬥圖小皇帝", "徐陽":"開車不留情"} for item in dic: # #直接循環迭代的時候拿到的是key
if item == '奎峯': dic.pop(item) # dictionary changed size during iteration
循環刪除的案例
dic = {"韓哥":"發圖不留種", "奎峯":"鬥圖小皇帝", "徐陽":"開車不留情"} lst = ['奎峯'] for el in lst: # 循環list
dic.pop(el) # 刪除的是dict中的元素
print(dic) lst = ["發圖哥", "誰困. 下午就往他那發圖", "轟炸"] print(type(lst)) # list
tu1 = tuple(lst) # tuple
print(tu1) # ()
print(type(tu1)) # tuple
lst1 = list(tu1) # list
print(lst1) # []
dic = {"a":'老A', 'b':"王寶強", 'c':"蓉姐", 'd':'百合姐'} for k in dic: if k == 'b' or k == 'c': dic.pop(k) # dictionary changed size during iteration
刪除帶有k的元素:
dic中的元素在迭代過程當中是不容許進行刪除的 dic = {'k1':'alex','k2':'wusir','s1':'金老闆'} 刪除key中帶有'k'的元素 for k in dic: if 'k' in k: del dic[k] print(dic) #報錯,在循環迭代的時候不容許進行刪除操做
dic = {'k1':'alex','k2':'wusir','s1':'金老闆'} dic_1 = [] # 刪除帶有k的元素
for k in dic: if 'k' in k: dic_1.append(k) for el in dic_1: del dic[el] print(dic)
數據類型的轉換: str-------> list split 分割 list-------> str join tuple----->list (元組可互換) tu1 = (1,2,3) l1 = list(tu1) print(l1) #[1, 2, 3]
tu2 = tuple(l1) print(tu2) #(1, 2, 3)
dic------>list list(dic)(列表中的元素只有key) dic = {'k1':'v1' , 'k2':'v2' , 'k3':'v3' , 'name':'alex'} l1 = list(dic) print(l1) #['k1', 'k2', 'k3', 'name']
print(list(dic.keys())) #['k1', 'k2', 'k3', 'name']
print(list(dic.values())) #['v1', 'v2', 'v3', 'alex']
print(list(dic.items())) #[('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('name', 'alex')]
0, " " , [ ] , ( ) , { } ,set() ------>bool 都是Fasle 集合; 基礎數據類型 set. 集合是一個可變的數據類型,他是以{ }形式存在的,空集合set( ),可是它要求它裏面的元素是不可變的(數字,字符串,元組,bool),集合是無序的,不重複的。 做用: 1,去重 2,關係測試。 列表的去重:set
l1 = [11,11, 22 , 22 , 33 , 33 , 33 , 44] l2 = list(set(l1)) l2.sort() #[33, 11, 44, 22] sort 排序
print(l2) #[11, 22, 33, 44]
列表的關係測試: 交集: &, intersetion
兩種表示: set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} set3 = set1 & set2 print(set3) 或者print(set1.intersection(set2)) #{4,5}
並集:| union
set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} print(set1 | set2) print(set1.union(set2)) #{1,2,3,4,5,6,7,8} #{1,2,3,4,5,6,7,8}
差集 - difference
兩種表示方法; set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} print(set1 - set2) set1獨有 #{1,2,3}
print(set2.difference(set1)) set2獨有 {8,6,7}
反交集 ^ symmetric_difference
set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} 兩種表示方法: print(set1 ^ set2) #{1,2,3,6,7,8}
print(set1.symmetric_difference(set2))
子集(小於,結果是Ture或Flase)
set1 = {1,2,3} set2 = {1,2,3,4,5,6} print (set1 < set2) # Ture set1 是 set2的子集
print(set1.issubset(set2)) # set1 是 set2的子集
超級(大於,結果是Ture或Flase)
set1 = {1,2,3} set2 = {1,2,3,4,5,6} print(set2 > set1) # Ture set2 是 set1的超集
print(set2.issuperset(set1)) # Ture set2 是 set1的超集
凍集合:
set1 = frozenset({1,2,3,'alex'}) print(set 1, type(set1)) # frozenset({1,2,3,'alex'}) <class 'frozenst'>
賦值運算:
l1 = [1,2,3] l2 = l1 l2.append(666) print(l1,l2) #[1, 2, 3, 666] [1, 2, 3, 666]
對於賦值運算來講,指向的都是同一個內存地址,一直都不變。
深淺copy:
淺copy:
l1 = [11,22,33] l2 = l1.copy() l1.append(666) print(l1,id(l1)) #[11, 22, 33, 666] 31203144
print(l2,id(l2)) #[11, 22, 33] 31203272
l1 = [11, 22, ['barry', [55, 66]], [11, 22]] l2 = l1.copy( ) l1[2].append('alex') #print(l1,id(l1)) #11, 22, ['barry', [55, 66], 'alex'], [11, 22]] 41723272 #print(l2,id(l2)) # [11, 22, ['barry', [55, 66], 'alex'], [11, 22]] 41723336
print(l1, id(l1[-1])) print(12, id (l2[-1]))
對於淺copy來講,第一層建立的是新的內存地址,而從第二層開始,指向的都是同一個內存地址,因此,對於第二層以及更深的層數來講,保持一致性。
深copy:徹底獨立
import copy l1 = [11,22, ['barry']] l2 = copy.deepcopy(l1) l1[2].append('alex') print(l1,id(l1[-1])) # [11,22, ['barry' , 'alex' ]] 42282312
print(l2, id(l2[-1])) # [11,22, ['barry'] ] 42332680
對於切片來講,是淺copy.
l1 = [1,2,3,4,5,6,[11,22]] l2 = l1[ : ] #l1.append(666) #print(l1,l2)
[1, 2, 3, 4, 5, 6, [11, 22], 666] [1, 2, 3, 4, 5, 6, [11, 22]] l1[-1].append(666) print(l1,l2) [1, 2, 3, 4, 5, 6, [11, 22, 666]] [1, 2, 3, 4, 5, 6, [11, 22, 666]]
集合的增刪查:(集合是無序的) 增:增長無序 1,add:
set1 = {' alex' ,'WuSir', 'RiTiAn' , 'egon' ,' barry'} set1.add('太白') print(set1) # {'alex', '太白‘ , ’barry' ,' Ritian ' , 'Wusir' , 'egon' }
2,update:迭代着增長
set1 = {' alex' ,'WuSir', 'RiTiAn' , 'egon' ,' barry'} set1.update('abc') set1.update([111, 2222, 333]) print(set1) {'egon', 'a', 'c', ' barry', 333, 2222, 111, ' alex', 'WuSir', 'RiTiAn', 'b'}
刪:無序 1,remove 按元素刪除
set1 = {' alex' ,'WuSir', 'RiTiAn' , 'egon' ,' barry'} set1.remove('RiTiAn') print(set1)
2,pop隨機刪除,有返回值
set1 = {' alex' ,'WuSir', 'RiTiAn' , 'egon' ,' barry'} print(set1.pop()) print(set1)
3,clear清空
set1 = {' alex' ,'WuSir', 'RiTiAn' , 'egon' ,' barry'} set1.clear() print(set1) # set()
4,del刪除總體
set1 = {' alex' ,'WuSir', 'RiTiAn' , 'egon' ,' barry'} del set1 print(set1)
查:
set1 = {' alex' ,'WuSir', 'RiTiAn' , 'egon' ,' barry'} for i in set1: print(i) ## egon
RiTiAn WuSir barry alex 兩者區別: print(set1) # {'RiTiAn', ' barry', 'egon', 'WuSir', ' alex'}
{'RiTiAn', ' barry', 'egon', 'WuSir', ' alex'} {'RiTiAn', ' barry', 'egon', 'WuSir', ' alex'} {'RiTiAn', ' barry', 'egon', 'WuSir', ' alex'} {'RiTiAn', ' barry', 'egon', 'WuSir', ' alex'}
導入copy模塊app
import copy lst1 = ["楊曉", "謝遜", ["說不得","聽不得","打不得","罵不得"]] lst2 = copy.deepcopy(lst1) # 深度拷貝
print(id(lst1[2]), id(lst2[2])) lst1[2].append("看不得") print(lst1, lst2)