集合是無序的,不重複的數據集合,裏面的元素是可哈希的(不可變類型),可是集合自己是不可哈希的(因此集合作不了字典的鍵)。app
一、集合的建立。spa
三種方法:一、直接set() 只能建立一個元素且不能是 int,不然會報錯code
二、set({})能夠隨便建立對象
三、set = {}blog
set1 = set('a') set2 = set({'a', 1}) set3 = {1, 2, 'barry'} print(set1, type(set1)) print(set2, type(set2)) print(set3, type(set3)) {'a'} <class 'set'> {1, 'a'} <class 'set'> {1, 2, 'barry'} <class 'set'>
二、集合的增索引
1)、直接增長內存
set.app('a)rem
2)、迭代增長 update()it
set.update('a') 注意:a會被分解成最小元素,分別添加io
set1 = {'alex', 'wusir', 'ritian'} set1.add('女神') print(set1) set1.update('AB') print(set1) set1.update('老師') print(set1) set1.update([1,2,3]) print(set1) {'wusir', '女神', 'alex', 'ritian'} {'ritian', 'A', 'B', 'wusir', '女神', 'alex'} {'老', 'ritian', 'A', '師', 'B', 'wusir', '女神', 'alex'} {'老', 1, 2, 3, 'ritian', 'A', '師', 'B', 'wusir', '女神', 'alex'}
三、集合的刪
1)、set.remove('a') 刪除指定元素,每次只能刪除一個元素
2)、set.pop() 隨機刪除一個元素
3)、set.clear() 清空集合
4)、del set 刪除集合
set1 = {'alex', 'wusir', 'ritian', 'egon', 'barry'} set1.remove('alex') # 刪除一個元素 print(set1) set1.pop() # 隨機刪除一個元素 print(set1) set1.clear() # 清空集合 print(set1) {'ritian', 'barry', 'egon', 'wusir'} {'barry', 'egon', 'wusir'} set()
四、集合的其餘操做
1)、交集 (& 或者 intersection)
set1 = {'as', 23, 'zx', 46, 55} set2 = {'qw', 55, 46, 'zx', 8} print(set1 & set2) print(set1.intersection(set2)) {'zx', 46, 55} {'zx', 46, 55}
2)、並集 (| 或者 union)
set1 = {'as', 23, 'zx', 46, 55} set2 = {'qw', 55, 46, 'zx', 8} set3 = {'er', 78, 46, 'zx', 89} print(set1 | set2 | set3) print(set1.union(set2)) {'qw', 8, 46, 78, 'as', 23, 55, 89, 'er', 'zx'} {'qw', 8, 46, 'as', 23, 55, 'zx'}
3)、差集 (- 或者 difference)
set1 - set2 是求 set1 中不一樣於 set2 的元素
set2 - set1 是求 set2 中不一樣於 set1 的元素
set1 = {'as', 23, 'zx', 46, 55} set2 = {'qw', 55, 46, 'zx', 8} set3 = {'er', 78, 46, 'zx', 23} print(set1 - set2 - set3) print(set1.difference(set2)) print(set2.difference(set1)) {'as'} {'as', 23} {8, 'qw'}
4)、反交集 (^ 或者 symmetric_difference)
set1 = {'as', 23, 'zx', 46, 55} set2 = {'qw', 55, 46, 'zx', 8} set3 = {'er', 78, 46, 'zx', 23} print(set1 ^ set2 ^ set3) print(set1.symmetric_difference(set2)) print(set2.symmetric_difference(set1)) {'er', 8, 46, 78, 'as', 'zx', 'qw'} {8, 'as', 23, 'qw'} {8, 'as', 23, 'qw'}
5)、子集與超集
set1 = { 'zx', 46, 55} set2 = {'qw', 55, 46, 'zx', 8} print(set1 < set2) print(set1.issubset(set2)) print(set2 > set1) print(set2.issuperset(set1)) True True True True
五、frozenset 不可變集合,讓集合變成不可變類型
1)、frozenset 轉換的結果是最小元素的集合,可是能夠轉換 list ,而後編輯。(能夠用來列表去重)
2)、frozenset 會將中間空格當成一個單個的元素生成。
s = frozenset('yang zhan') print(s) ({'y','a','n','g',' ','z','h'}) li = ['qw', 'as', 23, 'as', 23, 4] s = frozenset(li) print(s, type(s)) s1 = list(s) print(s) s1.remove(4) print(s1) frozenset({'qw', 'as', 4, 23}) <class 'frozenset'> frozenset({'qw', 'as', 4, 23}) ['qw', 'as', 23]
一、賦值運算
l1 與 l2 指向的是同一內存地址,他們徹底是同樣的。
l1 = [1, 2, 4, ['a', ['er'], 'w', 5]] l2 = l1 l1[3][0] = 7 print(l1, id(l1)) print(l2, id(l2)) [1, 2, 4, [7, ['er'], 'w', 5]] 6771080 [1, 2, 4, [7, ['er'], 'w', 5]] 6771080
二、淺拷貝 copy
對於淺 copy 來講,第一層建立的是新的內存地址,而從第二層開始,指向的都是同一內存地址
,全部對於第二層以及更深的層數來講保持一致性。
l1 = [1, 2, 4, ['a', ['er'], 'w', 5]] l2 = l1.copy() print(l1, id(l1)) print(l2, id(l2)) [1, 2, 4, ['a', ['er'], 'w', 5]] 6771080 [1, 2, 4, ['a', ['er'], 'w', 5]] 7154376
三、深拷貝 deepcopy
深拷貝,兩個徹底獨立的,改變任意一個的元素,不管多少層,兩一個毫不改變。
import copy l1 = [1, 2, 4, ['a', ['er'], 'w', 5]] l2 = copy.deepcopy(l1) l1[3][0] = 7 print(l1, id(l1)) print(l2, id(l2)) [1, 2, 4, [7, ['er'], 'w', 5]] 8892680 [1, 2, 4, ['a', ['er'], 'w', 5]] 8894408
enumerate : 枚舉 ,對於一個可迭代的(iterable)/ 可遍歷的對象(如 list、str),enumerate 將其組成一個索引序列,利用它能夠同時得到索引和值。
li = ['電視', '電腦', '手機', '廚具'] for i in enumerate(li): print(i)
for index,name in enumerate(li,1): print(index,name)
for index,name in enumerate(li,10): print(index,name) (0, '電視') (1, '電腦') (2, '手機') (3, '廚具')
1 電視 2 電腦 3 手機 4 廚具
10 電視 11 電腦 12 手機 13 廚具