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

2021-01-08 讀芯術

全文共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集合數據類型
    本篇介紹Python集合數據類型。集合不同於列表和元組類型,集合存儲的元素是無序且不能重複的,同數學中的集合一樣,集合可以執行集合的並、交、差運算。通過本篇的學習,可以達成如下目標。● 掌握集合數據類型● 在程序中使用集合數據類型在數學概念中,集合是由一個或多個確定的元素構成的整體。
  • Python數據類型之集合set
    # 集合:用來存儲一個無序的不重複的元素序列# 集合的標識也是大括號{},中間的元素使用逗號","隔開# 集合的創建方式:# set(序列)")print(a)# 集合輸出順序是無序的,無序即代表輸出的元素每次順序都不一樣,隨機的a = {122,"ttt",765}print(a)print(type(a))
  • Python中有關集合的講解
    一:集合(set)集合(set)和字典(dict)一樣,也是無序的序列,但是需要注意的是,集合中的元素是不重複的。你可以將Python中的集合和數學概念上的「集合」進行類比,Python中的集合具有數學中「集合」的無序性和互異性。
  • 資料庫|傳統的集合運算
    傳統的集合運算是二目運算,包括交、並、差、廣義笛卡爾積四種運算,如下圖所示:1) 並(union)關係R和關係5具有相同的目n(即兩個關係都有n個屬性),且相應的屬性取自同一個域,則關係R與關係S的並由屬於R或屬於S的元組組成,其結果關係仍為n目關係。
  • 快樂說數:補集及集合運算的綜合應用
    數學看上去枯燥無味,其實不然,掌握正確的學習方法,我們就能做到快樂學數學。學好數學大致能分為三個步驟:第一,梳理好知識點;第二,學好各種題型;第三:針對所學知識訓練鞏固。現在我們來看今天要學的內容,先看下邊補集及集合運算的綜合應用的思維導圖:接著我們針對著補集及集合運算的綜合應用的知識展開來講,首先是知識梳理:接著是題型分類:最後是試題訓練,並附上答案及解析
  • Python集合中的四種運算:交集、併集、差集和對稱差集運算
    在春天繼續學習Python集合,應用在Python當中是作為一種序列存在的,同時在Python中,也可以進行集合的一般運算,比如交集運算、併集運算和差集運算。先來看一下Python中對這幾種集合概念的定義。交集,就是兩個集合相交的部分,運算符為「&」;併集,就是合併在一起的集合,運算符為「|」;差集,就是兩個集合之差,運算符為「-」;最後還有一個對稱差集,運算符為「^」。
  • 「python學習手冊-筆記」003.數值類型
    這是由於浮點數是有限的比特位數,導致無法精確的表示某些數值.這個問題不僅在python中存在,在其他語言中同樣存在. 不過python有分數和小數,可以很好的規避這些問題. 畢竟python適合科學計算的特性不是白來的.python中的除法python中有三種風格的除法和兩種除法運算符.
  • 2011年數學高考總複習——集合
    理解集合之間包含與相等的含義,能識別給定集合的子集;在具體情境中,了解全集與空集的含義.  3. 理解兩個集合的併集與交集的含義,會求兩個簡單集合的併集與交集;理解在給定集合中一個子集  的補集的含義,會求給定子集的補集;能使用韋恩圖(Venn)表達集合的關係及運算.
  • 混沌(Chaos)世界——無序中的數學之美
    我的腦子裡總是有著這樣那樣的疑問,總是想去一探究竟,於是,我在各種各樣的書籍中尋找著答案,卻發現,在數學裡,總有一個或簡單或複雜,但是卻讓你越來越有興趣去發現的快樂與驚喜的源泉,就像現在,我將帶你們走近一個完全不同的混沌世界,一起看看這些科學界無法解釋的種種謎團。說到這裡,我們必須要先解開最核心的一個謎題:什麼是混沌?
  • 教學研討|1.3.2集合的基本運算 全集、補集(2019版新教材)
    本節課在上節類比實數運算研究集合的基本運算——併集和交集的基礎上,繼續研究集合的另外一種基本運算——補集,重點研究全集、補集的概念及初步運用,並在此過程中滲透類比、歸納、由特殊到一般等思維方法。作為集合運算環節中的重要一環,也為邏輯用語、不等式證明、概率等後續內容的學習提供了必要的知識儲備。
  • 高三新一輪數學複習――集合的含義與表示
    編首語:高中數學必修一的集合是大家比較熟悉,也覺得比較簡單的知識,但就因為簡單。很多學生反而因為粗心或者馬虎而失分,實在不應該。集合在高考中一般出現在選擇題的第一題,或者填空題的第一題,這類型的題目比較簡單,所以爭取拿到分。
  • 趣讀高一數學:什麼是集合?元素又是什麼?巧妙助記知識點
    集合與元素有什麼特性?什麼是集合?集合併不是一個有詳細定義的事物,什麼都可以是集合。我們玩的王者榮耀,裡面所有的英雄可以是一個集合,而李白,貂蟬等英雄就是元素;我們的家庭也可以是一個集合,爸爸,媽媽以及你都是元素。在這其中我們可以看出集合與元素的幾個特性。集合併沒有詳細的定義,什麼都可以是集合。家庭成員、太陽系的所有行星,都可以是一個集合。
  • 高一數學集合知識點總結
    那麼因為A和B中都有1,5,所以A∩B={1,5}。再來看看,他們兩個中含有1,2,3,5這些個元素,不管多少,反正不是你有,就是我有。那麼說A∪B={1,2,3,5}。圖中的陰影部分就是A∩B。有趣的是;例如在1到105中不是3,5,7的整倍數的數有多少個。結果是3,5,7每項減集合  1再相乘。48個。對稱差集:設A,B為集合,A與B的對稱差集A?B定義為:A?
  • 高中數學:集合的概念與運算專題總結
    考試要求 1.集合的含義,元素與集合的屬於關係,A級要求;2.集合之間包含與相等的含義,集合的子集,B級要求;3.併集、交集、補集的含義,用韋恩(Venn)圖表述集合關係,B級要求;4.求兩個簡單集合的併集與交集及求給定子集的補集,B級要求
  • 高一數學:集合的含義與表示
    高中數學十分難學,相對於初中數學來說,這部分數學知識概念很多,也複雜得多,因此,想要循序漸進地學好高中數學,就要從高一抓起,認真落實每一個數學概念,並且能夠融匯貫通舉一反三。以高一的第一部分內容來舉例說明,如何學好集合的含義與表示呢?
  • 高考數學集合的經典例題及解析
    高考數學集合的經典例題及解析對於高考的數學來說,集合這一知識點其實是非常需要去掌握的。高考數學集合的知識點集合的含義與表示:(1)通過實例,了解集合的含義,體會元素與集合的「屬於」關係;(2)能選擇自然語言、圖形語言、集合語言(列舉法或描述法)描述不同的具體問題,感受集合語言的意義和作用;集合間的基本關係:(1)理解集合之間包含與相等的含義,能識別給定集合的子集;(2)在具體情境中,了解全集與空集的含義
  • 理解高中數學集合的概念
    函數概念貫穿於高中數學始終,初中函數概念是動態變化過程中兩個量之間的關係,高中函數在集合概念的基礎上提出函數是兩個非空的數集間的對應關係。集合作為學生跨入高中校園的第一課有著它特殊的價值,集合更作為一種數學語言,為後續表示函數的定義域和值域、方程和不等式的解、曲線等打下了基礎.