全文共8958字,預計學習時長23分鐘
set是Python中無序的集合,它可以用於計算標準數學運算,例如交集、併集、差集和對稱差集,Other集合(例如列表、元組和字典)不支持集合操作,Dict視圖對象類似於集合,可以進行集合操作。本文將詳細探討set對象支持的數學運算。
先來看一下Set對象支持的數學運算:
· union()
· update()
· intersection()
· intersection_update()
· difference()
· difference_update()
· symmetric_difference()
· symmetric_difference_update()
· isdisjoint()
· issubset()
· issuperset()
Set運算操作可以通過兩種方式完成:使用方法或運算符。
『union()』
返回一個新集合,其中包含該set和other集合中的元素,使用union()或「|「算子。
語法:
union(*others)
set | other | ...
示例1:找到兩個集合的併集—A和B
返回一個包含集合A和集合B中的元素的新集合。但元素不會重複,集合中的所有元素都是唯一的。
A={1,2,3,4,5}
B={2,4,6,8}
print (A.union(B))#Output:{1, 2, 3, 4, 5, 6, 8}
print (A|B)#Output:{1, 2, 3, 4, 5, 6, 8}
示例2:查找兩個以上集合的併集
A={1,2,3,4,5}
B={2,4,6,8,10}
C={1,3,5,7,9}
print (A|B|C)#Output:{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
print (A.union(B,C))#Output:{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
union()方法和|之間的區別:
· union():接受任何可迭代的參數
· |運算符:僅接受set作為參數,否則將引發TypeError。
示例3:在union()方法中將iterable用作參數
A={1,2,3,4,5}
#iterable is given as list
print (A.union([2,4,6]))#Output:{1, 2, 3, 4, 5, 6}
#iterable is given as tuple
print (A.union((2,4,6)))#Output:{1, 2, 3, 4, 5, 6}
#iterable is given as range object
print (A.union(range(5,10)))#Output:{1, 2, 3, 4, 5, 6, 7, 8, 9}
#iterable is given as a dictionary
print (A.union({'a':6,'b':7}))#Output:{1, 2, 3, 4, 5, 'b', 'a'}
示例4:為|提供參數iterable
A={1,2,3,4,5}
B=[1,2,3]
print (A|B)
#Output:TypeError: unsupported operand type(s) for |: 'set' and 'list'
『update()』
更新集合,並從other集合中添加元素,元素不會重複,集合中的所有元素都是唯一的。通過使用update() 或使用|=運算符來執行,返回類型為None,將修改原始集本身。
語法:
update(*others)
set |= other | ...
示例1:在A和B兩個集合之間調用update()
通過添加兩個集合中的元素來更新集合A。
#update()
A={1,2,3,4,5}
B={4,5,6,7,8}
print (A.update(B)) #Output: None
print (A) #Output: {1, 2, 3, 4, 5, 6, 7, 8}A={1,2,3,4,5}
B={4,5,6,7,8}
A|=B
print (A) #Output: {1, 2, 3, 4, 5, 6, 7, 8}
示例2:在兩個以上集合之間調用update()
#update()
A={1,2,3}
B={3,4,5}
C={5,6,7}
print (A.update(B,C)) #Output: None
print (A) #Output: {1, 2, 3, 4, 5, 6, 7}
A={1,2,3}
B={3,4,5}
C={5,6,7}
A|=B|C
print (A) #Output: {1, 2, 3, 4, 5, 6, 7}
update() 方法和|=運算符之間的區別:
· update() :接受任何可迭代的參數。
· =運算符:僅接受set作為參數,否則將引發TypeError。
示例3:在update() 方法中將iterable用作參數
A={1,2,3}
#iterable is given as list
print (A.update([2,3,4]))#Output:None
print (A)#Output:{1,2,3,4}
#iterable is given as tuple
A={1,2,3}
A.update((2,3,4))
print (A)#Output:{1,2,3,4}
#iterable is given as range object
A={1,2,3}
A.update(range(2,5))
print (A)#Output:{1,2,3,4}
#iterable is given as a dictionary
A={1,2,3}
A.update({2:'a',3:'b'})
print (A) #Output:{1, 2, 3}
示例4:為|=運算符提供參數iterable:
#iterable is given as tuple
A={1,2,3}
B=(3,4)
A|=B
#Output:TypeError: unsupported operand type(s) for |=: 'set' and 'tuple'
『intersection()』
返回一個具有該集合和other集合共同元素的新集合,通過intersection()或使用&運算符來執行。
語法:
intersection(*others)
set & other & ...
示例1:找到兩個集合的交集—A和B
返回一個新集合,其中包含集合A和集合B中的共同元素。
A={1,2,3,4,5}
B={2,4,6,8}
#intersection is performed by intersection() method or & operator
print (A.intersection(B))#Output:{2,4}
print (A&B)#Output:{2,4}
示例2:找到兩個以上的交集
A={1,2,3,4,5}
B={2,4,6,8,10}
C={2,4}
print (A&B&C)#Output:{2,4}
print (A.intersection(B,C))#Output:{2,4}
intersection()方法和&運算符之間的區別:
· intersection():接受任何可迭代的參數。
· &運算符:僅接受set參數,否則將引發TypeError。
示例3:在intersection()方法中將iterable用作參數
A={1,2,3,4,5}
#iterable is given as list
print (A.intersection([1,4,6]))#Output:{1,4}
#iterable is given as tuple
print (A.intersection((2,4,6)))#Output:{2,4}
#iterable is given as range object
print (A.intersection(range(5,10)))#Output:{5}
#iterable is given as a dictionary
print (A.intersection({1:'a','b':7}))#Output:{1}
示例4:為&運算符提供參數iterable
A={1,2,3,4,5}
B=[1,2,3]
print (A&B)
#Output:TypeError: unsupported operand type(s) for &: 'set' and 'list'
『intersection_update()』
更新集合,只保留集合和other中共同的元素。可以通過使用 intersection_update()或使用&=運算符來執行,返回類型為None,將修改原始集本身。
語法:
intersection_update(*others)
set &= other & …
示例1:找到兩個集合A和B之間的 intersection_update()
通過僅保留在兩個集合中找到的元素來更新集合A。
#intersection_update()
A={1,2,3,4,5}
B={4,5,6,7,8}
print (A.intersection_update(B)) #Output: None
print (A) #Output: {4,5}A={1,2,3,4,5}
B={4,5,6,7,8}
A&=B
print (A) #Output: {4,5}
『difference()』
返回一個去除other中元素之後的新集合,通過difference() 或使用-運算符來執行。
語法:
difference(*others)
set - other - ...
示例1:找出A和B兩組之間的差異
返回一個新集合,其中包含在集合A而不在集合B中的元素。
A={1,2,3,4,5}
B={2,4,6,8}
print (A.difference(B))#Output:{1,3,5}
print (A-B)#Output:{1,3,5}
示例2:找出兩個以上集合之間的差異
A={1,2,3,4,5}
B={2,4,6,8,10}
C={2,3}
print (A-B-C)#Output:{1,5}
print (A.difference(B,C))#Output:{1,5}
difference()方法和-運算符之間的區別:
· difference():接受任何可迭代的參數
· -運算符:僅接受set作為參數。否則將引發TypeError。
示例3:在difference()方法中將iterable作為參數
A={1,2,3,4,5}
#iterable is given as list
print (A.difference([1,2,3]))#Output:{4,5}
#iterable is given as tuple
print (A.difference((1,2,3)))#Output:{4,5}
#iterable is given as range object
print (A.difference(range(1,4)))#Output:{4,5}
#iterable is given as a dictionary
print (A.difference({1:'a',2:'b',3:'c'}))#Output:{4,5}
示例4:為-運算符提供參數iterable
A={1,2,3,4,5}
B=[1,2,3]
print (A-B)
#Output:TypeError: unsupported operand type(s) for -: 'set' and 'list'
『difference_update()』
從other集合中刪除該集合中的元素,通過使用-= 運算符或使用difference_update() 方法來執行,返回類型為None,將修改原始集本身。
句法:
difference_update(*others)
set -= other | ...
示例1:找出A和B兩組之間的差異
返回一個新集合,其中包含在集合A而不在集合B中的元素。
A={1,2,3,4,5}
B={2,4,6,8}
print (A.difference(B))#Output:{1,3,5}
print (A-B)#Output:{1,3,5}
示例2:找出兩個以上集合之間的差異
A={1,2,3,4,5}
B={2,4,6,8,10}
C={2,3}
print (A-B-C)#Output:{1,5}
print (A.difference(B,C))#Output:{1,5}
difference()方法和-運算符之間的區別:
· difference():接受任何可迭代的參數
· -運算符:僅接受set作為參數。否則將引發TypeError。
示例3:在difference()方法中將iterable作為參數
A={1,2,3,4,5}
#iterable is given as list
print (A.difference([1,2,3]))#Output:{4,5}
#iterable is given as tuple
print (A.difference((1,2,3)))#Output:{4,5}
#iterable is given as range object
print (A.difference(range(1,4)))#Output:{4,5}
#iterable is given as a dictionary
print (A.difference({1:'a',2:'b',3:'c'}))#Output:{4,5}
示例4:為-運算符提供參數iterable
A={1,2,3,4,5}
B=[1,2,3]
print (A-B)
#Output:TypeError: unsupported operand type(s) for -: 'set' and 'list'
『difference_update()』
從other集合中刪除該集合中的元素,通過使用-= 運算符或使用difference_update() 方法來執行,返回類型為None,將修改原始集本身。
句法:
difference_update(*others)
set -= other | ...
示例1:找到兩個集合A和B之間的difference_update()
通過刪除集合A和集合B中都存在的元素來更新集合A。
A={1,2,3,4,5}
B={2,4,6}
#Return type is None.
print (A.difference_update(B))#Output:None
#It will update the original set
print (A) #Output: {1,3,5}
# difference_update by using -= operator
A-=(B)
print (A) #Output: {1,3,5}
示例2:查找兩個以上集合之間的difference_update
#difference_update() will modify the original set.
A={1,2,3}
B={1}
C={2}
#Return type is None.
print (A.difference_update(B,C))#Output:None
#It will update the original set
print (A) #Output: {3}
# difference_update by using -= operator
A={1,2,3}
B={1}
C={2}
A-=B|C
print (A) #Output: {3}
difference_update()方法與-=運算符的區別:
· difference_update():接受任何可迭代的參數
· -=運算符:僅接受set參數,否則將引發TypeError。
示例3:在difference_update()方法中將iterable作為參數
#iterable is given as list
A={1,2,3}
B=[1]
print (A.difference_update(B))#Output:None
print (A)#Output:{2,3}
示例4:為-=運算符提供參數iterable
A={1,2,3}
B=[1]
A-=B
print (A)
#Output: TypeError: unsupported operand type(s) for -=: 'set' and 'list'
『symmetric_difference()』
返回一個新集合,該集合中的元素屬於集合或other,但不包含兩個集合共有的元素。通過symmetric_difference()或使用^運算符來執行。
語法:
symmetric_difference(other)
set ^ other
示例1:找到A和B兩組之間的對稱差
返回一個新集合,其中包含來自集合A和集合B的元素,但不包含兩個集合中共同的元素。
A={1,2}
B={2,3}
print (A.symmetric_difference(B))#Output:{1,3}
print (A^B)#Output:{1,3}
示例2:對稱差集僅適用於2個集合
多個集合不支持symmetric_difference()方法,如果給出兩個以上的集合,則會引發TypeError。
A={1,2}
B={2,3,5}
C={3,4}
print (A.symmetric_difference(B,C))#Output:TypeError:symmetric_difference() takes exactly one argument (2 given)
但是我們可以使用^找到多個集合的對稱差集:
A={1,2}
B={2,3,5}
C={3,4}
print (A^B^C)#Output:{1,4,5}
symmetric_difference()方法和^運算符之間的區別:
· symmetric_difference():接受任何可迭代的參數,但此方法不允許使用多個集合。
· ^運算符:它將僅接受set作為參數。否則,將引發TypeError。通過使用^運算符,可以找到多個集合之間的對稱差集。
示例3:在symmetric_difference()方法中將iterable作為參數
#iterable is given as list
A={1,2,3}
B=[1]
print (A.symmetric_difference(B))#Output:{2,3}
#iterable is given as tuple
A={1,2,3}
B=(1,)
print (A.symmetric_difference(B))#Output:{2,3}
#iterable is given as range object
A={1,2,3}
B=range(2)
print (A.symmetric_difference(B))#Output:{2,3}
示例4:為^運算符提供參數iterable:
A={1,2,3}
B=[1]
A^B
print (A) #Output: TypeError: unsupported operand type(s) for ^: 'set' and'list'
『symmetric_difference_update()』
更新集合,保留在兩個集合中均找到的元素並去除兩個集合中的公共元素。可以通過使用symmetric_difference_update()或使用^=運算符來實現,返回類型為None,將修改原始集本身。
語法:
symmetric_difference_update(other)
set ^= other
示例1:在A和B兩組之間找到symmetric_difference_update()
將通過僅保留能在任一集合中找到,但不在兩個集合中同時出現的元素來更新集合A。
#symmetric_difference_update()
A={1,2,3,4,5}
B={4,5,6,7,8}
print (A.symmetric_difference_update(B)) #Output: None
print (A) #Output: {1, 2, 3, 6, 7, 8}
A={1,2,3,4,5}
B={4,5,6,7,8}
A^=B
print (A) #Output: {1, 2, 3, 6, 7, 8}
『isdisjoint()』
如果該集合沒有共同元素,則返回True。若且唯若它們的交集為空集時,這時稱集合之間無連接。
語法:
isdisjoint(other)
示例
#Set A and Set B containing common elements
A={1,2,3,4,5}
B={4,5,6,7,8}
print (A.isdisjoint(B))#Output:False
#Set A and Set B not containing common elements
A={1,2}
B={3,4}
print (A.isdisjoint(B))#Output:True
『issubset()』
測試集合中的每個元素是否都在other元素中。
語法:
issubset(other)
set <= other
示例:檢查集合A是否為集合B的子集
可以通過issubset()方法或使用≤運算符來完成。
A={1,2,3,4,5}
B={4,5,6,7,8}
print (A.issubset(B)) #Output: False
print (A<=B)#Output: False
A={1,2,3}
B={1,2,3,4,5}
print (A.issubset(B)) #Output: True
print (A<=B)#Output: False
Proper subset
測試集合是否為other的真子集,即set <= otherand set != other。
句法:
set < other
示例:檢查集合A是否是B的真子集
如果兩個集合相等,則意味著 A.issubsetset(B) 返回True,但是真子集A<B將返回False。
A={1,2,3,4,5}
B={4,5,6,7,8}
print (A<B)#Output: False
A={1,2,3,4,5}
B={1,2,3,4,5}
print (A<B)#Output: False
A={1,2,3}
B={1,2,3,4,5}
print (A<B)#Output: True
『issuperset()』
測試other中的每一個元素是否在集合中。
語法:
issuperset(other)
set >= other
示例:檢查集合A是否為B的超集
可以通過issuperset()方法或使用≥運算符來實現:
A={1,2,3,4,5}
B={4,5,6,7,8}
print (A.issuperset(B)) #Output: False
print (A>=B)#Output:True
A={1,2,3,4,5}
B={1,2,3}
print (A.issuperset(B)) #Output: True
print (A>=B)#Output:True
Proper superset
測試集合是否是other集合的真超集,即,set >= otherand set != other。
語法:
set > other
示例:檢查集合A是否為B的真超集。
如果兩個集合相等,則意味著A.issuperset(B)返回True,但是真超集A> B將返回False。
A={1,2,3,4,5}
B={4,5}
print (A>B)#Output: True
A={1,2,3,4,5}
B={1,2,3,4,5}
print (A>B)#Output: False
A={1,2,3}
B={1,2,3,4,5}
print (A>B)#Output: True
總結
Frozenset不支持所有更新方法,frozenset類型不可變且不可哈希創建,一旦創建內容無法更改。由於所有更新方法都修改了原始集,所以frozenset不支持它。
我們可以通過兩種方式執行數學集合設置操作:使用運算符或使用一種方法。其不同之處在於,如果使用方法,將接受iterable作為參數。但是對於運算符,僅應設置參數。如果不是,則會引發 TypeError。所有更新方法都會更新原始集,frozenset不支持該更新。除了更新方法外,所有其他方法都返回一個新集合。
留言點讚關注
我們一起分享AI學習與發展的乾貨
如轉載,請後臺留言,遵守轉載規範