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 >>>