5.9自我總結 1.集合數據類型 1.定義 用{}中間值用,隔開,且集合中元素排列是無序的,而且如果有相同元素會只保留一個 2.演算法 1.必須掌握 1.長度len 2.成員運算in和not in 3.並集(union或者|) ) 4.交集(intersection或者&) ) 5差集(differe ...
5.9自我總結
1.集合數據類型
1.定義
用{}中間值用,隔開,且集合中元素排列是無序的,而且如果有相同元素會只保留一個
2.演算法
1.必須掌握
1.長度len
set_1 = {1,2,3,4,5}
print(len(set_1))
#5
2.成員運算in和not in
#表示判斷集合裡面是否有某個值
set_1 = {1,2,3,4,5}
print(1 in set_1)
#True
print(100 in set_1)
#False
3.並集(union或者|)
#兩個集合的集合綜合,union或者|
set_1 = {1,2,3}
set_2 = {3,4,5}
set_3 = set_1.union(set_2)
set_4 = (set_1 | set_2)
print(set_3)
print(set_4)
#{1, 2, 3, 4, 5}
)
4.交集(intersection或者&)
set_1 = {1,2,3}
set_2 = {3,4,5}
set_3 = set_1.intersection(set_2)
set_4 = (set_1 & set_2)
print(set_3)
print(set_4)
#{2}
)
5差集(difference 或者 -)
set_1 = {1,2,3}
set_2 = {3,4,5}
set_3 = set_1.difference(set_2)
set_4 = (set_1 - set_2)
print(set_3)
print(set_4)
#{1,2}
6.對稱差集
set_1 = {1,2,3}
set_2 = {3,4,5}
set_3 = set_1.symmetric_difference(set_2)
set_4 = (set_1 ^ set_2)
print(set_3)
print(set_4)
#{1, 2, 4, 5}
7.集合內容是否相同(==)
set_1 = {1,2,3}
set_2 = {3,4,5}
print(set_1 == set_2)
#False
8.父集(>或者>=或者issuperset)
set_1 = {1,2,3}
set_2 = {1,2,3}
set_3 = set_1.issuperset(set_2) #issuperset與>=意思相同
set_4 = (set_1 > set_2) #如果set_2 = {2},結果也為True
print(set_3) #True
print(set_4) #False
9.子集(<或者)
set_1 = {1,2,3}
set_2 = {1,2,3}
set_3 = set_1.issubset(set_2) #issubset與<=意思相同
set_4 = (set_1 < set_2) #如果set_2 = {2},結果也為True
print(set_3) #True
print(set_4) #False
2.掌握
1.add
添加,列印添加時候回返回None
2.remove
移除,列印添加時候回返回None,找不到移除的內容會報錯
3.difference_update
刪除相同的值 列印添加時候回返回None
4.discard
移除,列印添加時候回返回None,找不到移除的內容也會返回None
5.isdisjoint
判斷有無交集
3.一個值或多個值
一個值
4,有序的或無序的
無序的
5.可變的或不可變
可變
2.深拷貝,淺拷貝,拷貝
比如說A拷貝B,A裡面的值發送變化時候B也會發生變化,淺拷貝和深拷貝一般出現在一個變數里有多個元素,有可變的元素和不可變的元素,比如若說A淺拷貝B,其中B可變元素變了,A也變了,B中不可變元素變了,A不會變,深拷貝則是,其中不管哪個元素變了後,兩者互不影響受限。
3.今日題目
第一部分
有如下兩個集合,pythons是報名python課程的學員名字集合,linuxs是報名linux課程的學員名字集合。
pythons={'jason','nick','sean','tank','gangdan','tiepao'}
linuxs={'tank','oldboy','gangdan'}
求出即報名python又報名linux課程的學員名字集合
pythons={'jason','nick','sean','tank','gangdan','tiepao'} linuxs={'tank','oldboy','gangdan'} pythons_linuxs = pythons & linuxs print(pythons_linuxs)
求出所有報名的學生名字集合
pythons={'jason','nick','sean','tank','gangdan','tiepao'} linuxs={'tank','oldboy','gangdan'} pythons_linuxs = pythons | linuxs print(pythons_linuxs)
求出只報名python課程的學員名字
pythons={'jason','nick','sean','tank','gangdan','tiepao'} linuxs={'tank','oldboy','gangdan'} pythons_linuxs = pythons - linuxs print(pythons_linuxs)
求出沒有同時這兩門課程的學員名字集合
pythons={'jason','nick','sean','tank','gangdan','tiepao'} linuxs={'tank','oldboy','gangdan'} pythons_linuxs = pythons ^ linuxs print(pythons_linuxs)
第二部分
有列表
l=['a','b',1,'a','a']
,列表元素均為可hash類型,去重,得到新列表,且新列表無需保持列表原來的順序#去重 l=['a','b',1,'a','a'] new_l = set(l)
在上題的基礎上,保存列表原來的順序
#第一種,想法,先用SET把他變成有序,再找到相同的刪掉在原來的位置,後面迴圈發現刪了後索引沒法索引,就根據長度再套了個迴圈 l=['a','b',1,'a','a'] l_2 = set(l) while len(l) != len(l_2): for v_1 in range(len(l)): for v_2 in range(1,len(l)): if l[v_1] == l[v_2]: d = v_2 break del l[d] print(l) #第二種 做第三題發現裡面有字典沒法轉換成set,想到這樣,後來發現這樣就可以了。。 l_2 = [] for A in l: if A not in l_2: l_2.append(A) print(l_2)
有如下列表,列表元素為不可hash類型,去重,得到新列表,且新列表一定要保持列表原來的順序
l=[
{'name':'nick','age':18,'sex':'male'},
{'name':'tank','age':73,'sex':'male'},
{'name':'nick','age':20,'sex':'female'},
{'name':'nick','age':18,'sex':'male'},
{'name':'nick','age':18,'sex':'male'},
]
#第一種
l=[
{'name':'nick','age':18,'sex':'male'},
{'name':'tank','age':73,'sex':'male'},
{'name':'nick','age':20,'sex':'female'},
{'name':'nick','age':18,'sex':'male'},
{'name':'nick','age':18,'sex':'male'},
]
l_2 = []
for A in l:
if A not in l_2:
l_2.append(A)
while len(l) != len(l_2):
for v_1 in range(len(l)):
for v_2 in range(1,len(l)):
if l[v_1] == l[v_2]:
d = v_2
break
del l[d]
print(l)
#第二種 由於列表裡有字典沒法SET,然後想到這樣加進去,後面就這樣了
l_2 = []
for A in l:
if A not in l_2:
l_2.append(A)
print(l_2)
第三部分
- 請簡述拷貝、淺拷貝、深拷貝三者之間的區別:
比如說A拷貝B,A裡面的值發送變化時候B也會發生變化,淺拷貝和深拷貝一般出現在一個變數里有多個元素,有可變的元素和不可變的元素,比如若說A淺拷貝B,其中B可變元素變了,A也變了,B中不可變元素變了,A不會變,深拷貝則是,其中不管哪個元素變了後,兩者互不影響受限。