Python之集合詳解


定義:

1.不同元素組成

2.無序

3.集合中的元素必須是不可變類型

 

創建集合

s = {1,2,3,4,5,6,7,8}

1.定義可變集合

>>> set_test = set('hello')
>>> set_test
{'h', 'l', 'e', 'o'}

2.定義不可變集合

>>> set_test = set('hello')
>>> set_test
{'h', 'l', 'e', 'o'}  # 由此可見集合中的元素不可重復,都是不同的
>>> n_set_test = frozenset(set_test)
>>> n_set_test
frozenset({'h', 'l', 'e', 'o'})

集合運算

 集合之間也可進行數學集合運算(例如:並集、交集等),可用相應的操作符或方法來實現。

子集

  子集,為某個集合中一部分的集合,故亦稱部分集合。

  使用操作符 < 執行子集操作,同樣地,也可使用方法 issubset() 完成。

>>> A = set('abcd')
>>> B = set('cdef')
>>> C = set("ab")
>>> C < A
True         # C 是 A 的子集
>>> C < B
False
>>> C.issubset(A)
True         

並集 

  一組集合的並集是這些集合的所有元素構成的集合,而不包含其他元素。

  使用操作符 | 執行並集操作,同樣地,也可使用方法 union() 完成。

>>> A | B
{'c', 'b', 'f', 'd', 'e', 'a'}
>>> A.union(B)
{'c', 'b', 'f', 'd', 'e', 'a'}

交集

  兩個集合 A 和 B 的交集是含有所有既屬於 A 又屬於 B 的元素,而沒有其他元素的集合。

  使用 & 操作符執行交集操作,同樣地,也可使用方法 intersection() 完成。

>>> A & B
{'c', 'd'}
>>> A.intersection(B)
{'c', 'd'}

差集

  A 與 B 的差集是所有屬於 A 且不屬於 B 的元素構成的集合

  使用操作符 - 執行差集操作,同樣地,也可使用方法 difference() 完成。

>>> A - B
{'b', 'a'}
>>> A.difference(B)
{'b', 'a'}

對稱差

  兩個集合的對稱差是只屬於其中一個集合,而不屬於另一個集合的元素組成的集合。

  使用 ^ 操作符執行差集操作,同樣地,也可使用方法 symmetric_difference() 完成。

>>> A ^ B
{'b', 'f', 'e', 'a'}
>>> A.symmetric_difference(B)
{'b', 'f', 'e', 'a'}

  

集合方法

1.add 向集合中添加元素

>>> s = {1, 2, 3, 4, 5, 6}
>>> s.add("s")
>>> s
{1, 2, 3, 4, 5, 6, 's'}

2.clear 清空集合

>>> s = {1, 2, 3, 4, 5, 6}
>>> s.clear()
>>> s
set()

3.copy 返回集合的淺拷貝

>>> s = {1, 2, 3, 4, 5, 6}
>>> new_s = s.copy()
>>> new_s
{1, 2, 3, 4, 5, 6}

4.pop 刪除並返回任意的集合元素(如果集合為空,會引發 KeyError)

>>> s = {1, 2, 3, 4, 5, 6}
>>> s.pop()  # pop刪除時是無序的隨機刪除
1
>>> s
{2, 3, 4, 5, 6}

5.remove 刪除集合中的一個元素(如果元素不存在,會引發 KeyError)

>>> s = {1, 2, 3, 4, 5, 6}
>>> s.remove(3)
>>> s
{1, 2, 4, 5, 6}

6.discard 刪除集合中的一個元素(如果元素不存在,則不執行任何操作)

>>> s = {1, 2, 3, 4, 5, 6}
>>> s.discard("sb")
>>> s
{1, 2, 3, 4, 5, 6}

7.intersection 將兩個集合的交集作為一個新集合返回

>>> s = {1, 2, 3, 4, 5, 6}
>>> s2 = {3, 4, 5, 6, 7, 8}
>>> s.intersection(s2)
{3, 4, 5, 6}
>>> s&s2  # 可以達到相同的效果
{3, 4, 5, 6}

8.union 將集合的並集作為一個新集合返回

>>> s = {1, 2, 3, 4, 5, 6}
>>> s2 = {3, 4, 5, 6, 7, 8}
>>> print(s.union(s2))
{1, 2, 3, 4, 5, 6, 7, 8}
>>> print(s|s2)    # 用 | 可以達到相同效果
{1, 2, 3, 4, 5, 6, 7, 8}

9.difference 將兩個或多個集合的差集作為一個新集合返回 

>>> s = {1, 2, 3, 4, 5, 6}
>>> s2 = {3, 4, 5, 6, 7, 8}
>>> print("差集:",s.difference(s2)) # 去除s和s2中相同元素,刪除s2 保留s中剩余元素
差集: {1, 2}
>>> print("差集:",s2.difference(s))  # 去除s和s2中相同元素,刪除s2 保留s2中剩余元素
差集: {8, 7} >>> print("差集:",s - s2) # 符號 - 可以達到相同結果 差集: {1, 2} >>> print("差集:",s2 - s) # 符號 - 可以達到相同結果 差集: {8, 7}

10. symmetric_difference 將兩個集合的對稱差作為一個新集合返回(兩個集合合並刪除相同部分,其余保留) 

>>> s = {1, 2, 3, 4, 5, 6}
>>> s2 = {3, 4, 5, 6, 7, 8}
>>> s.symmetric_difference(s2)
{1, 2, 7, 8}

11.update 用自己和另一個的並集來更新這個集合 

>>> s = {'p', 'y'}
>>> s.update(['t', 'h', 'o', 'n'])    # 添加多個元素
>>> s
{'p', 't', 'o', 'y', 'h', 'n'}
>>> s.update(['H', 'e'], {'l', 'l', 'o'})    # 添加列表和集合
>>> s
{'p', 'H', 't', 'l', 'o', 'y', 'e', 'h', 'n'}

12.intersection_update()  用自己和另一個的交集來更新這個集合

>>> s = {'a', 'b', 'c', 'd', 'q'}
>>> s2 = {'c', 'd', 'e', 'f'}
>>> s.intersection_update(s2)   # 相當於s = s - s2
>>> s
{'c', 'd'}

13.isdisjoint()  如果兩個集合有一個空交集,返回 True

>>> s = {1, 2}
>>> s1 = {3, 4}
>>> s2 = {2, 3}
>>> s.isdisjoint(s1)    
True                               # s  和 s1 兩個集合的交集為空返回 True
>>> s.isdisjoint(s2)
False                             # s  和 s2 兩個集合的交集為 2 不是空 所有返回False

14.issubset() 如果另一個集合包含這個集合,返回 True

>>> s = {1, 2, 3}
>>> s1 = {1, 2, 3, 4}
>>> s2 = {2, 3}
>>> s.issubset(s1)
True                            # 因為 s1 集合 包含 s 集合
>>> s.issubset(s2)
False                           # s2 集合 不包含 s 集合

15.issuperset()  如果這個集合包含另一個集合,返回 True

>>> s = {1, 2, 3}
>>> s1 = {1, 2, 3, 4}
>>> s2 = {2, 3}
>>> s.issuperset(s1)
False                                        # s 集合不包含 s1 集合 
>>> s.issuperset(s2)
True                                         # s 集合包含 s2 集合                                      

16.difference_update() 從這個集合中刪除另一個集合的所有元素

>>> s = {1, 2, 3}
>>> s1 = {1, 2, 3, 4}
>>> s2 = {2, 3}
>>> s.difference_update(s2)
>>> s
{1}                                                   # s2中的2,3   s集合中也有2,3  所以保留1
>>> s1.difference_update(s2)
>>> s1
{1, 4}

  

17.symmetric_difference_update() 用自己和另一個的對稱差來更新這個集合

>>> s = {1, 2, 3}
>>> s1 = {1, 2, 3, 4}
>>> s2 = {2, 3}
>>> s1.symmetric_difference_update(s)
>>> s1
{4}
>>> s1.symmetric_difference_update(s2)
>>> s1
{2, 3, 4}
>>> s.symmetric_difference_update(s2)
>>> s
{1}

集合與內置函數

下述內置函數通常作用於集合,來執行不同的任務。

函數 描述
all() 如果集合中的所有元素都是 True(或者集合為空),則返回 True。
any() 如果集合中的所有元素都是 True,則返回 True;如果集合為空,則返回 False。
enumerate() 返回一個枚舉對象,其中包含了集合中所有元素的索引和值(配對)。
len() 返回集合的長度(元素個數)
max() 返回集合中的最大項
min() 返回集合中的最小項
sorted() 從集合中的元素返回新的排序列表(不排序集合本身)
sum() 返回集合的所有元素之和


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM