2.4.2 集合操作與運算
阿新 • • 發佈:2018-03-12
部分 簡單介紹 關系運算 collect 之間 對稱 常用 作用 AD
1 集合元素增加與刪除
使用集合對象的add()方法可以為其增加新元素,如果該元素已存在於集合則忽略該操作;update()方法用於合並另外一個集合中的額元素到當前集合中。例如:
1 >>> s = {1,2,3} 2 >>> s.add(3) 3 >>> s 4 {1, 2, 3} 5 >>> #添加元素,重復元素自動忽略 6 >>> 7 >>> s.update({3,4}) #更新當前集合,自動忽略重復的元素 8 >>> 9 >>> s10 {1, 2, 3, 4} 11 >>>
集合對象的pop()方法用於隨機刪除並返回集合中的一個元素,如果集合為空則拋出異常;remover()方法用於刪除集合中的元素,如果指定元素不存在則拋出異常;discard()用於從集合中刪除一個特定元素,如果元素不在集合中則忽略該操作;clear()方法清空集合刪除所有元素。例如:
1 >>> s 2 {1, 2, 3, 4} 3 >>> 4 >>> s.discard(5) #刪除元素,集合中不存在則忽略該操作 5 >>> 6>>> s.remove(5) #刪除元素,集合中不存在則拋出異常 7 Traceback (most recent call last): 8 File "<pyshell#80>", line 1, in <module> 9 s.remove(5) #刪除元素,集合中不存在則拋出異常 10 KeyError: 5 11 >>> 12 >>> s.pop() #刪除並返回一個元素 13 1 14 >>> 15>>> s.clear() #清空集合中所有元素 16 >>> 17 >>> s 18 set() 19 >>>
2 集合運算
Python集合支持交集、並集、補集、差集等運算,例如:
1 >>> aset = set([8,9,10,11,12,13]) 2 >>> bset = {0,1,2,3,7,8} 3 >>> 4 >>> aset | bset #並集 5 {0, 1, 2, 3, 7, 8, 9, 10, 11, 12, 13} 6 >>> 7 >>> aset.union(bset) #並集 8 {0, 1, 2, 3, 7, 8, 9, 10, 11, 12, 13} 9 >>> 10 >>> aset & bset #交集 11 {8} 12 >>> aset.intersection(bset) #交集 13 {8} 14 >>> 15 >>> aset - bset #差集 16 {9, 10, 11, 12, 13} 17 >>> 18 >>> aset.difference(bset) #差集 19 {9, 10, 11, 12, 13} 20 >>> 21 >>> aset.symmetric_difference(bset) #對稱差集 22 {0, 1, 2, 3, 7, 9, 10, 11, 12, 13} 23 >>> 24 >>> #對稱差集的意思就是,提出兩個集合的交集部分,剩下的元素組成的集合 25 >>> 26 >>> aset ^ bset 27 {0, 1, 2, 3, 7, 9, 10, 11, 12, 13} 28 >>> 29 30 #稍微總結一下: 31 #並集: | union 32 #交集: & intersection 33 #差集: - difference 34 #對稱差集: ^ symmetric_difference
1 #比價集合的大小,確切地說是判斷集合之間的包含關系 2 3 >>> x = {1,2,3} 4 >>> y = {1,2,5} 5 >>> z = {1,2,3,4} 6 >>> 7 >>> x < z 8 True 9 >>> 10 >>> x > y 11 False 12 >>> 13 >>> x < y 14 False 15 >>> 16 >>> y < z 17 False 18 >>> 19 20 21 22 23 #關系運算符 >、>=、<、<=作用於集合時表示集合之間的包含關系,而不是集合中元素的大小關系。 24 25 #如果 A > B 成立的話,說明集合B的元素都在集合A中,是集合B包含於集合A 26 27 >>> a = {1,2,3} 28 >>> b = {1,2,3} 29 >>> 30 >>> a > b 31 False 32 >>> 33 >>> a >= b #兩個集合元素是相通的,判斷結果返回True 34 True 35 >>> 36 >>> a <= b 37 True 38 >>> 39 >>> a = {1,2,3,4} 40 >>> b = {1,2,3} 41 >>> 42 >>> a > b 43 True 44 >>> 45 >>> a < b 46 False 47 >>>
1 >>> #測試是否為子集 2 >>> 3 >>> a = {1,2} 4 >>> b = {1,2} 5 >>> c = {1,2,3} 6 >>> 7 >>> a.issubset(b) #測試集合a是否為集合b的子集 8 True 9 >>> 10 >>> b.issubset(b) #測試集合b是否為集合a的子集 11 True 12 >>> 13 >>> a.issubset(c) #測試集合a是否為集合b的子集 14 True 15 >>> 16 >>> c.issubset(a) #測試集合c是否為集合a的子集 17 False 18 >>> 19 20 21 #如果兩個集合的元素相同,就互為子集
小提示:內置函數len()、max()、min()、sum()、sourted()以及成員測試運算符in也適用於集合。
拓展知識:
自定義枚舉類型,除了本章介紹的常用數據類型,Python還通過collections、enum、array、heapq、fractions等標準庫提供了其他豐富的類型,這裏簡單介紹如何使用enum模塊提供的Enum類來創建枚舉類型,其他標準庫將在後續章節中根據內容的組織逐步進行介紹。
1 >>> from enum import Enum #導入模塊中的類 2 >>> 3 >>> class Color(Enum): #創建自定義枚舉類 4 red = 1 5 blue = 2 6 green = 3 7 8 9 >>> 10 >>> Color.red #訪問枚舉類的成員 11 <Color.red: 1> 12 >>> 13 >>> type(Color.green) #查看枚舉類成員的類型 14 <enum ‘Color‘> 15 >>> 16 >>> 17 >>> isinstance(Color.red,Color) 18 True 19 >>> 20 >>> x = dict() 21 >>> x[Color.red] = ‘red‘ #枚舉類成員可以哈希,可以作為字典的“鍵” 22 >>> x 23 {<Color.red: 1>: ‘red‘} 24 >>> 25 >>> Color(2) #返回指定值對應的枚舉類成員 26 <Color.blue: 2> 27 >>> 28 >>> 29 >>> Color[‘red‘] 30 <Color.red: 1> 31 >>> 32 >>> 33 >>> r = Color.red 34 >>> r 35 <Color.red: 1> 36 >>> 37 >>> r.name 38 ‘red‘ 39 >>> 40 >>> r.value 41 1 42 >>> 43 >>> list(Color) #枚舉類是可以叠代的,所以可以轉換為列表 44 [<Color.red: 1>, <Color.blue: 2>, <Color.green: 3>] 45 >>>
2.4.2 集合操作與運算