python中集合用法大全
轉載請註明出處:
https://blog.csdn.net/qq_40678222/article/details/83065192
目錄
序言
13.0 symmetric_difference_update()函式
序言:
集合中各元素間是無序的,相同元素在集合中唯一存在。即 集合是無序組合,它沒有索引和位置的概念,但可變集合中的元素是可以動態增加或刪除的。
集合應用場景:
- 去重:如列表 去重。
- 關係測試:判斷資料是否存在 交集,並集,差集 等關係。
集合的型別:
可變集合 —— set
不可變集合 —— frozenset
注:本文重點討論的是可變集合set
1.0 set()函式
描述:可以將其它的組合資料型別轉化為可變集合型別(或將不可變的集合型別frozenset轉變為可變的集合型別set),返回一個無重複元素且排序任意的可變集合。
語法: set() -> new empty set object 返回一個空集合(該集合可變)
set(iterable) -> new set object 返回一個新集合(該集合可變)
- iterable —— 要轉換的組合資料型別。
注:s = {} 生成的是字典型別,而不是集合型別。
程式示例①:
s1 = set() #建立一個空集合。
l = [1.23,"a"] #列表型別
d = {1:"a",2:"b"} #字典型別
a = (1,2,"b") #元組型別
s = "厲害了,我的國" #字串
#將列表,字典,元組,字串轉化為集合
s2 = set(s)
s3 = set(l)
s4 = set(d)
s5 = set(a)
print(s1)
print(s2)
print(s3)
print(s4)
print(s5)
程式執行結果:
set()
{'了', '的', '厲', '害', '國', ',', '我'}
{'a', 1.23}
{1, 2}
{1, 2, 'b'}
程式示例②:
d = {} #建立的是字典型別,空字典
s = set() #建立可變空集合
a = {1,2,3,"a"} #預設為可變集合
b = set("1,2,3") #與a語句等效
c1 = frozenset() #建立空的不可變集合,該集合不能新增任何元素。
c2 = frozenset("1,2,3") #不可變集合,集合中元素不能增加或刪除。
print(type(d),type(s),type(a),type(b),type(c1),type(c2))
f = frozenset(a) #將可變集合a轉換為不可變集合f
print(f,type(f))
s1 = set(c2) #將不可變集合c2轉換為可變集合s1
print(s1,type(s1))
程式執行結果:
<class 'dict'> <class 'set'> <class 'set'> <class 'set'> <class 'frozenset'> <class 'frozenset'>
frozenset({'a', 1, 2, 3}) <class 'frozenset'>
{'2', '3', ',', '1'} <class 'set'>
2.0 add()函式
描述:如果集合s中不存在元素x,則將元素x新增到集合s中。
語法:s.add(x)
- x —— 要新增的元素。集合s已經存在元素x,也不會報錯。
程式示例:
s = {1,2,"a"}
s.add("ab") #將字串"ab"新增到集合s中
s.add(1) #集合s已存在元素 1 ,但不會報錯
s.add("z") #將單字元"z"新增到集合s中
print(s)
程式執行結果:
{'a', 1, 2, 'z', 'ab'}
3.0 clear()函式
描述:刪除集合s中的所有元素。
語法:s.clear()
程式示例:
s = {1,2,3,"a","bn"}
s.clear() #刪除集合s所有元素
print(s)
程式執行結果:
set()
4.0 copy()函式
描述:複製生成一個新的集合。
語法 s.copy()
程式示例:
s = {1,2,3,"a","bc"}
s1 = s.copy() #複製集合s
s.add(789) #向原集合新增元素 789
s1.add("opq") #向複製集合s1新增元素 “opq”
#結果都互不干擾
print(s)
print(s1)
程式執行結果:
{1, 2, 3, 'a', 789, 'bc'}
{1, 2, 3, 'a', 'opq', 'bc'}
5.0 discard()函式
描述:移除集合s中的value元素。若value元素存在,則移除,不存在也不報錯。
語法:s.discard(value)
- value —— 要刪除的元素
程式示例:
s = {1,2,3,4,5,"a","ab","h"}
s.discard(1) #移除元素 1
s.discard("ab") #移除元素 "ab"
s.discard("hj") #移除元素 "hj",但集合s中不存在元素"hj"
print(s)
程式執行結果:
{2, 3, 4, 5, 'a', 'h'}
6.0 remove()函式
描述:移除集合s中的value元素。若value元素存在,則移除,不存在則報錯(產生KeyError異常)。
語法:s.remove(value)
- value —— 要刪除的元素
程式示例:
s = {1,2,3,4,5,"a","ab","h"}
s.remove(1) #移除元素 1
s.remove("ab") #移除元素 "ab"
print(s)
s.remove("hj") #移除元素 "hj",但集合s中不存在元素"hj" 程式會報錯
print(s)
程式執行結果:
{2, 3, 4, 5, 'a', 'h'}
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-51-aa7ff641e07c> in <module>()
3 s.remove("ab") #移除元素 "ab"
4 print(s)
----> 5 s.remove("hj") #移除元素 "hj",但集合s中不存在元素"hj"
6 print(s)
KeyError: 'hj'
7.0 pop()函式
描述:隨機移除集合s中的一個元素並返回該元素。若集合為空則報錯(產生KeyError異常)
語法:s.pop()
程式示例:
s1 = {1,2,3,4,5,"a","b"}
print(s1.pop()) # 隨機刪除一個元素並返回
print(s1)
s2 = set() #建立一個空集合
print(s2.pop()) #s2為空集合,程式會報錯。
程式執行結果:
1
{2, 3, 4, 5, 'b', 'a'}
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-58-4637751b63f2> in <module>()
4
5 s2 = set() #建立一個空集合
----> 6 print(s2.pop()) #s2為空集合,程式會報錯。
KeyError: 'pop from an empty set'
8.0 difference()函式
描述:生成集合的差集。
差集概念:一般地,記A,B是兩個集合,則所有屬於A且不屬於B的元素構成的集合,叫做集合A減集合B(或集合A與集合B之差),類似地,對於集合A、B,我們把集合 x|x∈A,且x∉B 叫做A與B的差集
語法:a.difference(b,c,d...) 返回一個差集
- a —— 集合a
- b,c,d... —— 括號中可以有多個集合(但至少要有一個)。
程式示例①:
a = {1,2,3,"a","b","c"}
b = {1,2,"a","h","78","b"}
x1 = a.difference(b) #集合a 減 集合b
x2 = b.difference(a) #集合b 減 集合a
print(x1)
print(x2)
print(a,b) #集合a和集合b的元素不改變。
程式執行結果:
{3, 'c'}
{'78', 'h'}
{1, 2, 3, 'b', 'a', 'c'} {1, 2, 'b', 'a', 'h', '78'}
程式示例②:
a = {1,2,3,"a","b","c","k"}
b = {1,2,"a","h","78","b"}
c = {1,2,0,"c","l"}
x = a.difference(b,c)
print(x)
程式執行結果:
{3, 'k'}
9.0 difference_update()函式
描述:把集合a更新為集合a與集合b的差集。集合a元素被更新改變,但集合b元素不改變。
語法:a.difference_update(b,c,d...) 無返回值
- a —— 集合a
- b,c,d... —— 括號中可以有多個集合(但至少要有一個)。
程式示例①:
a = {1,2,3,"a","b","c"}
b = {1,2,"a","h","78","b"}
a.difference_update(b) #把集合a 更新 為集合a與集合b的差集
print(a.difference_update(b)) #返回值為空。
print(a) #集合a元素被更新改變。
print(b) #集合b元素不改變
程式執行結果:
None
{3, 'c'}
{1, 2, 'b', 'a', 'h', '78'}
程式示例②:
a = {1,2,3,4,5,6,7,8,9,"a","b"}
b = {1,2,3,"a","k"}
c = {7,8,"h","o"}
a.difference_update(b,c)
print(a) #集合a元素被更新為 集合a與集合b,集合c 的差集。
print(b,c) #集合b,c元素不改變
程式執行結果:
{4, 5, 6, 9, 'b'}
{'a', 1, 2, 3, 'k'} {8, 'o', 'h', 7}
注意difference()函式和difference_update()函式的區別:
- difference()函式不改變集合的元素。
- difference_update()函式改變集合a元素。
10.0 union()函式
描述:生成集合的並集。即將集合a和集合b取並集,並將並集作為一個新的集合返回, 但是不改變原集合a和集合b
並集的概念:給定兩個集合A,B,把他們所有的元素合併在一起組成的集合,叫做集合A與集合B的並集,記作A∪B,讀作A並B。
語法:a.union(b,c,d...)
- a —— 集合a
- b,c,d... —— 括號中可以有多個集合(但至少要有一個)。
程式示例:
a = {1,2,"a","b"}
c = {3,5,"a"}
d = {"b",7,8,9}
print(a.union(c,d)) #返回集合a,集合b,集合c 的並集
print(a.union(c)) #返回集合a,集合c的並集
程式執行結果:
{1, 2, 'b', 3, 5, 7, 8, 'a', 9}
{1, 2, 'b', 3, 5, 'a'}
11.0 update()函式
描述:將集合a和集合b取並集,並將結果儲存在集合a中(即更新集合a),集合b不改變,但是沒有返回值。
或:將x中的所有項新增到集合a中。x可以是 集合,列表,元組,字典等或者支援迭代的所有物件。
語法:a.update(b,c,d...) 返回值為空
a.update(x) 返回值為空
- a —— 集合a
- b,c,d... —— 括號中可以有多個集合(但至少要有一個)。
- x —— 可以是 集合,序列或可以迭代的物件。
注:集合中union()函式和update()函式都是將多個可迭代的集合 合併,但是返回的結果和對原集合的影響卻不一樣
程式示例①:
a = {1,2,3,"a","b"}
b = {7,2,9,"j"}
a.update(b)
print(a.update(b)) #返回值為空
print(a) #集合a被更新。
print(b) #集合b不改變。
程式執行結果:
None
{1, 2, 3, 7, 'b', 9, 'a', 'j'}
{9, 2, 'j', 7}
程式示例②:
a = {1,2,3,"a","b"}
b = {7,2,9,"j"}
c = {5,6,"o"}
a.update(b,c)
print(a) #集合a被更新。
print(b,c) #集合b,集合c 不改變。
程式執行結果:
{1, 2, 3, 5, 6, 7, 'o', 'b', 9, 'a', 'j'}
{9, 2, 'j', 7} {5, 6, 'o'}
程式示例③:
a = {1,2,3}
b = {7,8,9}
l = ["a","b",55] #列表
t = ("c","88") #元組
d = {"k":11,"l":"666"} #字典
#分別將 集合b 列表l 元組t 字典d 新增到集合a中
a.update(b,l,t,d)
print(a)
程式執行結果:
{1, 2, 3, 'a', 7, 8, 9, 'k', 'l', '88', 'c', 55, 'b'}
12.0 symmetric_difference()函式
描述:返回對稱差集(反向交集),即返回兩個集合中不重複的元素集合,即移除兩個集合中都存在的元素。
對稱差集的概念:集合A與集合B中所有不屬於A∩B的元素的集合,記為A△B,也就是A△B=(A/B)∪(B/A).
語法:a.symmetric_difference(b)
- a —— 集合a
- b —— 集合b
程式示例:
a = {1,2,3,"a","b"}
b = {5,6,1,"b","c"}
x1 = a.symmetric_difference(b)
print(x1)
print(a,b)
程式執行結果:
{2, 3, 5, 6, 'c', 'a'}
{1, 2, 3, 'b', 'a'} {'c', 1, 'b', 5, 6}
13.0 symmetric_difference_update()函式
函式:把集合a更新為:集合a與集合b的對稱差集。集合a元素被更新改變,但集合b元素不改變。
對稱差集的概念:集合A與集合B中所有不屬於A∩B的元素的集合,記為A△B,也就是A△B=(A/B)∪(B/A).
語法:a.symmetric_difference_update(b) 返回值為空
- a —— 集合a
- b —— 集合b
程式示例:
a = {1,2,3,"a","b"}
b = {1,5,6,"a",}
a.symmetric_difference_update(b) #取集合a和集合b的對稱差集,更新集合a並儲存在集合a中
print(a.symmetric_difference_update(b)) #返回值為空
print(a) #集合a被更新.
print(b) #集合b元素不變。
程式執行結果:
None
{1, 2, 3, 'b', 'a'}
{1, 'a', 5, 6}
14.0 intersection()函式
描述:生成集合的交集。
交集的概念:設A,B是兩個集合,由所有屬於集合A且屬於集合B的元素所組成的集合,叫做集合A與集合B的交集(intersection),記作A∩B。
語法:a.intersection(b,c,d...)
- a —— 集合a
- b,c,d... —— 括號中可以有多個集合(但至少要有一個)。
程式示例:
a = {1,2,3,"a","b"}
c = {2,8,"b","a","c"}
b = {1,2,5,8,"a","k"}
x1 = a.intersection(b) #返回集合a 和集合b 的交集
x2 = a.intersection(b,c) #返回集合a,集合b,集合c的交集
print(x1)
print(x2)
print(a,b,c) #集合a,集合b,集合c 元素不改變
程式執行結果:
{1, 2, 'a'}
{2, 'a'}
{1, 2, 3, 'b', 'a'} {1, 2, 'k', 5, 8, 'a'} {8, 'b', 2, 'a', 'c'}
15.0 intersection_update()函式
描述:把集合a更新為:集合a與集合b(或多個集合)的交集。集合a元素被更新,但集合b(其它集合)的元素不改變。
交集的概念:設A,B是兩個集合,由所有屬於集合A且屬於集合B的元素所組成的集合,叫做集合A與集合B的交集(intersection),記作A∩B。
語法:a.intersection_update(b,c,d...) 返回值為空
- a —— 集合a
- b,c,d... —— 括號中可以有多個集合(但至少要有一個)。
程式示例①:
a = {1,2,3,"a","b"}
c = {2,8,"b","a","c"}
a.intersection_update(b) #取集合a和集合b的交集,更新集合a並把結果儲存在集合a中
print(a.intersection_update(b)) #返回值為空
print(a) #集合a中的元素被更新
print(b) #集合b中的元素不改變
程式執行結果:
None
{1, 2, 'a'}
{1, 2, 'k', 5, 8, 'a'}
程式示例②:
a = {1,2,3,"a","b"}
c = {2,8,"b","a","c"}
b = {1,2,5,8,"a","k"}
a.intersection_update(b,c) #去集合a,集合b,集合c的交集,更新集合a並把結果儲存在集合a中
print(a)
print(b,c)
程式執行結果:
{2, 'a'}
{1, 2, 'k', 5, 8, 'a'} {8, 'b', 2, 'a', 'c'}
16.0 isdisjoint()函式
描述:判斷兩個集合是否包含相同的元素,若沒有相同元素則返回 True,否則返回 False。
語法:s.isdisjoint(b) 返回bool型別(True False)
- a —— 集合a
- b —— 集合b
程式示例:
a = {1,2,3,"a"}
b = {"b","c","55","66"}
c = {1,2,5,"a"}
print(a.isdisjoint(b)) #集合a與集合b無相同的元素 返回True
print(a.isdisjoint(c)) #集合a與集合c有相同的元素,返回False
程式執行結果:
True
False
17.0 issubset()函式
描述:判斷兩個集合是否是子集關係(A⊆B)。即判斷集合a中的所有元素是否都包含在集合b中,若都包含在集合b中則返回True,否則返回False
語法:a.issubset(b) 返回bool型別(True False)
- a —— 集合a
- b —— 集合b
程式示例:
a = {1,2,3,"a"}
b = {1,2,3,"a","b","c"}
c = {1,2,3,"b","h"}
print(a.issubset(b)) #集合a是集合b的子集
print(a.issubset(c)) #集合a不是集合b的子集
程式執行結果:
True
False
18.0 issuperset()函式
描述:判斷兩個集合是否是超集(父集)。即判斷集合b中的所有元素是否都包含在集合a中,若都包含在集合a中則返回True,否則返回False
超集概念:如果一個集合S2中的每一個元素都在集合S1中,且集合S1中可能包含S2中沒有的元素,則集合S1就是S2的一個超集,反過來,S2是S1的子集。 S1是S2的超集,若S1中一定有S2中沒有的元素,則S1是S2的真超集,反過來S2是S1的真子集。
語法:a.issuperset(b) 返回bool型別(True False)
- a —— 集合a
- b —— 集合b
程式示例:
a = {1,2,3,"a","b","c"}
b = {1,3,"a"}
c = {1,2,3,"b","h"}
print(a.issuperset(b)) #集合a是集合b的超集.
print(a.issuperset(c)) #集合a不是集合b的超集。
程式執行結果:
True
False
注:issubset()函式和issuperset()函式的用法相似,注意兩者區別。