1. 程式人生 > >2.4.2 集合操作與運算

2.4.2 集合操作與運算

部分 簡單介紹 關系運算 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 >>> s
10 {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 集合操作與運算