day006-1 邁向大神之路
集合及深淺拷貝
補充
tuple 元祖 set 集合
迴圈刪除列表中的元素
for i in lis:
del lis[lis.index(i)]
for i in range(len(lis)):
del list[i] #出錯 因為每刪除一個序號也會跟著改變
lis=[11,22,33,44,55]
for i in range(len(lis)-1,0-1,-1):
print(i)
del lis[i]
print(lis) ##本人寫的
#小朋友寫的
dic={'k1','v1','k2','v2'} for i in dic: if 'k' in i del dic[i] dic2={} for i in dic: if 'k' in i dic1.setdefault(i,dic[i]) dic=dic1
課上老師精心優化
l=[]
for i in dic:
if ‘k’in i:
l.append(i)
for i in l:
del dic[i]
print(dic)
元祖中 無 , 且一個元素 你該是什麼就是什麼
1. 集合
它裡面的元素必須是不可變資料型別 無序性 不重複(去重)
{ } 無鍵值對 不能改
形式: s=set({1,2,3})
1.增加
- set1.add(“王振”)
- set1.update(a,b)
2. 刪除
- set1.pop() #隨機刪除 有返回值
- set1.remove(‘a’)按照元素刪除
- set1.clear() #清空列表 set()
- del set()
3. 查
for i in set1
print(i)
* 交集
set1&set2
set1.intersection(set2)
* 並集
set1|set2
set1.union(set2)
* 反交集
set1^set2
set1.symmetric.difference(set2)
* 差集 set1 獨有的
set1-set2
set.difference(set2)
* 子集
set1<set2
set1.issubset(set2) true
* 超級
set2>set1
set2.issuperset(set1) true
li=[1,2,33,33,1] 去重複
mth:
set1=set(li)
print(set1)
li=list(set1)
frozenset 不可變資料型別
s=frozenset(“barry”)
遍歷無序
2.深淺copy
- 先看賦值運算。
l1 = [1,2,3,[‘barry’,‘alex’]]
l2 = l1
l1[0] = 111
print(l1) # [111, 2, 3, [‘barry’, ‘alex’]]
print(l2) # [111, 2, 3, [‘barry’, ‘alex’]]
l1[3][0] = ‘wusir’
print(l1) # [111, 2, 3, [‘wusir’, ‘alex’]]
print(l2) # [111, 2, 3, [‘wusir’, ‘alex’]]
對於賦值運算來說,l1與l2指向的是同一個記憶體地址,所以他們是完全一樣的。
- 淺拷貝copy。
l1 = [1,2,3,['barry','alex']]
l2 = l1.copy()
print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2380296895816
print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2380296895048
l1[1] = 222
print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2593038941128
print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2593038941896
l1[3][0] = 'wusir'
print(l1,id(l1[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016
print(l2,id(l2[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016
對於淺copy來說,第一層建立的是新的記憶體地址,而從第二層開始,指向的都是同一個記憶體地址,所以,對於第二層以及更深的層數來說,保持一致性。
- 深拷貝deepcopy
import copy
l1 = [1,2,3,['barry','alex']]
l2 = copy.deepcopy(l1)
print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2915377167816
print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048
l1[1] = 222
print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2915377167816
print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048
l1[3][0] = 'wusir'
print(l1,id(l1[3])) # [1, 222, 3, ['wusir', 'alex']] 2915377167240
print(l2,id(l2[3])) # [1, 2, 3, ['barry', 'alex']] 2915377167304
對於深copy來說,兩個是完全獨立的,改變任意一個的任何元素(無論多少層),另一個絕對不改變。