注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性。
集合类型定义
集合是多个元素的无序组合,与数学中集合的概念一致(即具备互异性和无序性)。所谓互异性,是指集合中的每一个元素都是独一无二的,集合中不存在两个相同的元素。跟字典中的键一样,集合中的元素须是不可变数据类型。
集合的建立
集合用大括号{}表示,元素间用逗号隔开。
建立集合类型用{}或set()。
建立空集合类型,必须使用set()。不能用{}。这是因为,用{}定义的是字典类型的空字典,而用set()才能定义集合类型的空集合。如下所示:
a = set()
b = {}
print("a的类型为", type(a)) # 集合类型。
print("b的类型为", type(b)) # 字典类型。
<<<
a的类型为 <class 'set'>
b的类型为 <class 'dict'>
<<<
可变数据类型和不可变数据类型
可变数据类型有:list,dict,set。
不可变数据类型有:int,float,string,tuple,range()。
值得注意的是,虽然字典的键和集合中的元素要求是不可变数据类型,但是字典和集合本身都是可变数据类型。
两种方法建立集合类型的例子如下:
A = {"python", 123, ("python", 123)} #使用{}建立集合
B = set("pypy123") #使用set{}建立集合
print("A =", A)
print("B =", B)
<<<
A = {123, 'python', ('python', 123)}
B = {'3', '2', 'p', 'y', '1'}
<<<
集合的操作符及运算
集合有6个基本操作符和4个增强操作符。
集合有6个基本操作符如下:
| header 1 | header 2 |
|---|---|
| row 1 col 1 | row 1 col 2 |
| row 2 col 1 | row 2 col 2 |
| 基本操作符及应用 | 运算说明 | 描述 |
|---|---|---|
| S | T | 并集 | 返回一个新集合,包括在集合S和T中的所有元素 |
| S - T | 差集 | 返回一个新集合,包括在集合S但不在T中的元素 |
| S & T | 交集 | 返回一个新集合,包括同时在集合S和T中的元素 |
| S ^ T | 对称差 | 返回一个新集合,包括集合S和T中的非相同元素 |
| S<=T或S<T | 包含于 | 返回True/False,判断S和T的子集关系 |
| S>=T或S>T | 包含 | 返回True/False,判断S和T的包含关系 |
集合的4个增强操作符如下:
| 增强操作符及应用 | 描述 |
|---|---|
| S |= T | 更新集合S,包括在集合S和T中的所有元素 |
| S -= T | 更新集合S,包括在集合S但不在T中的元素 |
| S &= T | 更新集合S,包括同时在集合S和T中的元素 |
| S ^= T | 更新集合S,包括集合S和T中的非相同元素 |
交集判定
S1.isdisjoint(S2):S1与S2的集合交集是否为空,True为空,否则False。
集合运算的例子如下:
A = {"p", "y", 123}
B = {"1", "2", "3", "p", "y"}
print("A - B =", A - B) #A-B返回包含在A中,但不包含在B中的元素构成的集合。
print("B - A =", B - A) #B-A返回包含在B中,但不包含在A中的元素构成的集合。
print("A & B =", A & B) #A&B是交集运算,返回同时包含在A和B中的元素构成的集合。
print("A | B =", A | B) #A|B是并集运算,返回包含在A和B中的所有元素构成的集合。
print("A ^ B =", A ^ B) #A^B是对称差运算,返回A和B中的所有非相同元素构成的集合。
<<<
A - B = {123}
B - A = {'2', '1', '3'}
A & B = {'p', 'y'}
A | B = {'3', '2', 'p', 'y', '1', 123}
A ^ B = {'3', '2', '1', 123}
<<<
集合的操作方法或函数
设S为一个集合。
增长集合
S.add(elem)——添加一个元素(必须是不可变数据)。
S.update(Set)——批量添加其它集合中的所有元素。
缩减集合
S.remove(elem)——从集合中移除元素elem。如果elem不存在于集合中则会引发 KeyError。
S.discard(elem)——如果元素elem存在于集合中则将其移除。如果elem不存在,并不会报错。
S.pop()——从集合中移除并返回任意一个元素。 如果集合为空则会引发 KeyError。
S.clear()——从集合中移除所有元素。
下面是集合的增长和缩减的方法或函数的一些例子:
S = {'a', 'b', 'c'}
#集合添加元素。
S.add('d') #集合S添加一个元素。
S
Out[54]: {'a', 'b', 'c', 'd'}
S1 = {'e', 'f'}
S.update(S1) #批量添加集合S1中的所有元素到集合S中。
S
Out[57]: {'a', 'b', 'c', 'd', 'e', 'f'}
#集合缩减元素。
S.remove('f') #.remove(elem)移除单个元素elem。
S.remove('g') #.remove(elem)移除的元素elem不存在时会报错。
Traceback (most recent call last):
File "<ipython-input-59-d161f40a2bc5>", line 1, in <module>
S.remove('g')
KeyError: 'g'
S.discard('e') #.discard(elem)移除单个元素,同.remove(elem)。
S.discard('g') #.discard(elem)移除的元素elem不存在时,不会报错。与.remove(elem)不同。
S.pop() #随机移除S集合中的任意一个元素。
Out[62]: 'a'
S.pop()
Out[63]: 'c'
S
Out[64]: {'b', 'd'}
S.clear() #一次性清空集合S中的所有元素。
S
Out[66]: set()
集合大小:len函数。
S = {1, 2, 3, 4, 'a', 'b', 'c', 'd'}
len(S)
Out[2]: 8
To be continued.