無序的集合:Python中的數學集合運算

2020-12-11 讀芯術

全文共8958字,預計學習時長23分鐘

圖源:unsplash

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學習與發展的乾貨

如轉載,請後臺留言,遵守轉載規範

相關焦點

  • Python的集合與字典
    Set(集合)集合(set)是一個無序不重複元素的序列。基本功能是進行成員關係測試和刪除重複元素。/usr/bin/python3student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}print(student) # 輸出集合,重複的元素被自動去掉# 成員測試if('Rose'
  • CloudX開發者社群丨無序的集合:Python中的數學集合運算
    ,它可以用於計算標準數學運算,例如交集、併集、差集和對稱差集,Other集合(例如列表、元組和字典)不支持集合操作,Dict視圖對象類似於集合,可以進行集合操作。,並從other集合中添加元素,元素不會重複,集合中的所有元素都是唯一的。
  • 集合:Python最後一類序列,序列知識點匯總
    2、如何操作集合?3、列表、元組、字典、集合四類序列間的異常?集合定義:集合是Python中一種無序可變、元素不能重複的序列。在Python中,集合底層是字典實現,它所有的元素都是字典中的「鍵對象」,因此不能重複且唯一的。
  • 玩轉Python集合,這一篇就夠了!
    集合(set)是另一種標準的 Python 數據類型,它也可用於存儲值。它們之間主要的區別在於,集合不同於列表或元組,集合中的每一個元素不能出現多次,並且是無序存儲的。Python 集合的優勢由於集合中的元素不能出現多次,這使得集合在很大程度上能夠高效地從列表或元組中刪除重複值,並執行取併集、交集等常見的的數學操作。
  • python數據結構總結——集合
    python中,列表和元組都是序列的一種,它們的基本特徵,最大區別在於,列表是可變的,而元組則是不可變的。python中還有另外一種序列,叫做集合。python集合集合也是一種序列。它的特點是可變,但是無法通過索引操作。因為集合中的元素是無序的。當試圖通過索引進行操作時,會提示TypeError,類型錯誤。集合中的元素還是不可重複的。當嘗試向一個集合中,添加多個重複元素時,重複元素只會存在一個。
  • Python數據類型之集合set
    # 集合:用來存儲一個無序的不重複的元素序列# 集合的標識也是大括號{},中間的元素使用逗號","隔開# 集合的創建方式:# set(序列)(a)# 集合輸出順序是無序的,無序即代表輸出的元素每次順序都不一樣,隨機的a = {122,"ttt",765}print(a)print(type(a))
  • python中集合set的使用場景概述
    在python中,集合set具有字典key的特點,其元素無序且唯一,可以通過大括號{}或者函數set來創建,用法如下>>> a = set((1, 2, 3))>>> a{1, 2, 3}>>> type(a)<class 'set'>>&
  • Python中有關集合的講解
    一:集合(set)集合(set)和字典(dict)一樣,也是無序的序列,但是需要注意的是,集合中的元素是不重複的。你可以將Python中的集合和數學概念上的「集合」進行類比,Python中的集合具有數學中「集合」的無序性和互異性。
  • 第三煉:利用數軸解決集合運算(高三數學100個特點問題)
    第3煉 利用數軸解決集合運算問題數形結合是解決高中數學問題的常用手段,其優點在於通過圖形能夠直觀的觀察到某些結果,與代數的精確性結合,能夠快速解決一些較麻煩的問題。在集合的運算中,涉及到單變量的取值範圍,數軸就是一個非常好用的工具,本文將以一些題目為例,來介紹如何使用數軸快速的進行集合的交並運算。
  • python知識填充 —— 組合數據類型介紹與操作
    今天講一講python中的組合數據類型的操作以及底層實現,揭秘一下其中的原理。今天的內容廢話不多說,直接開始!s = "牛奶奶請劉奶奶喝牛奶"d = {}for key in s:  d[key] = d.get(key,0) + 1  print(d)4.集合集合是一系列互不相等元素的無序集合,元素必須是不可變類型。
  • 高一數學十月月考的查漏補缺——集合及命題部分
    1、集合及其運算理解集合、空集的意義,會用列舉法和描述法表示集合;理解子集、真子集、集合相等等概念,能判斷兩個簡單集合之間的包含關係或相等關係;>理解交集、併集,掌握集合的交、並運算,知道有關的基本運算性質;理解全集的意義,能求出已知集合的補集.
  • python中的set(集合)詳解
    A.基本概念1.集合性質>有可變集合對象和不可變集合對象兩種>無序對象2.集合存儲>集合對象只能存放不可變對象3.注意>集合同數學概念,只能存放不同的不可變對象>返回set()代表空集>將可迭代對象轉為集合會自動去重,返回一個無重的集合B.集合的定義
  • Python中如何創建集合
    #創作者招募令#第六十七節:創建集合集合作為序列形式的一種,在Python中也有應用。先來看看集合在數學中的定義:集合(aggregate)是「確定的一堆東西」,集合裡的「東西」則稱為元素。而現代的集合一般被定義為:由一個或多個確定的元素所構成的整體。
  • python中的數學運算(二)
    1、python中有一些類似數學集合的運算,如 或、且、非的關係,對應的運算符有 |,&,-等運算符。
  • Python 集合是什麼,為什麼應該使用以及如何使用? | Linux 中國
    這些結構包括列表、字典、元組和集合。根據 Python 3 文檔:集合是一個無序集合,沒有重複元素。基本用途包括成員測試和消除重複的條目。集合對象還支持數學運算,如併集、交集、差集和對等差分。在本文中,我們將回顧並查看上述定義中列出的每個要素的示例。讓我們馬上開始,看看如何創建它。
  • python數據類型串講(下)
    在上一篇文章中討論了python標準類型中序列的兩種:列表和元祖,下面我們繼續介紹python的第二種標準類型:字典(dict)。1、字典dict顧名思義,字典就像我們日常生活中使用的新華字典,其作用在於根據索引(拼音或偏旁)快速查找到所需內容,而python中的字典也是如此,python中字典的索引稱為「鍵」(key),由python中不可變的數據類型(如字符串、數值等)構成,具有固定(不可變)、唯一(不可重複)性;python中字典的內容稱為「值」,其可以為python中的任意標準數據類型的一種或多種
  • 必須掌握的四種python數據結構,五分鐘快速掌握
    數據結構是相互之間存在一種或多種特定關係的數據元素的集合今天要講python的四個內置數據結構:分別是列表、元組、集合和字典,每種結構數據都有自己的特點,應用於不同情況2、(tuple)元組中的元素也是有序的,但元素內容不可修改,元組和列表不同的地方時,元組中的元素不可以更改。
  • Python專欄2
    字典(dictionary)是Python中唯一的內置映射類型。映射是指的可以通過名稱來訪問各個值的數據結構。字典可能是Python裡面最為重要的數據結構。下面我們來介紹關於字典的一些操作。4.2 集合這裡的集合與數學上的集合類似,都是由無序的不可重複的元素組合起來的。和前面的數據結構不同的是,集合裡面沒有索引。
  • 高中數學易錯點、重難點歸納系列之:集合及其運算
    大家好,我是青蒿數學宋老師,從今天起,我將發布系列文章,對高中數學每一章節的易錯點和重難點內容進行解析說明,並配以十分經典的例題,基本都是宋老師平時授課內容的精華濃縮,有需要的同學可以收藏關注。集合這一章可以說是高中數學裡面考察的相對簡單的一章了,但是對於新高一的學生來說可能仍存在一些問題,本章的主要易錯點和重難點內容如下:1. 務必「讀懂」集合:研究集合之前,務必讀懂集合,一般來說,集合都是以描述法的形式給定,即{ | }的形式。
  • python中namedtuple與OrderedDict 的使用
    今天來講解一下python中的 Namedtuple與OrderedDict 的使用。一、Namedtuple我們都知道,在python的數據結構裡,tuple(元組)表示的是不可變集合。我們學習python,接觸到的字典的概念,字典是無序的,因為它是按照hash來存儲。但是python中有個模塊collections(英文,收集、集合),裡面自帶了一個子類OrderedDict,實現了對字典對象中元素的排序。