定義:
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() | 返回集合的所有元素之和 |