集合(set)是一个无序不重复元素的序列。
1. 创建集合
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
创建格式:
parame = {value01,value02,...}
或者
set(value)
>>> set0 = {1,2,3} # 整形的集合
>>> set0
{1, 2, 3}
>>>
>>> set0 = {1.0, 'Python', (1, 2, 3)} # 混合类型的集合
>>>
>>> set0 = set(['P', 'y']) # 从列表创建
>>> set0
{'P', 'y'}
>>>
>>>
>>> set0 = {1, 2, [3, 4]} # 不能有可变元素
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>>
>>> d = {} # 空字典
>>> type(d)
<class 'dict'>
>>>
>>>
>>> s = set() # 空集合
>>> type(s)
<class 'set'>
2. 集合特性:
- {}大括号组织起来
- 无序性
- 互异性
- 确定性
>>> # 无序性
...
>>> s = set('Python')
>>> s
{'h', 'n', 'o', 't', 'P', 'y'}
>>>
>>> s[0] # 不支持索引
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing
>>>
>>>
>>> # 互异性
...
>>> s = set('Hello')
>>> s
{'H', 'e', 'l', 'o'}
>>>
>>>
>>> # 确定性
...
>>> 'l' in s
True
>>>
>>> 'z' in s
False
3. 集合运算
子集
子集,为某个集合中一部分的集合,故亦称部分集合。
使用操作符 <
执行子集操作,同样地,也可使用方法 issubset() 完成。
并集
一组集合的并集是这些集合的所有元素构成的集合,而不包含其他元素。
使用操作符 |
执行并集操作,同样地,也可使用方法 union() 完成。
交集
两个集合 A 和 B 的交集是含有所有既属于 A 又属于 B 的元素,而没有其他元素的集合。
使用 &
操作符执行交集操作,同样地,也可使用方法 intersection() 完成。
差集
A 与 B 的差集是所有属于 A 且不属于 B 的元素构成的集合
使用操作符 -
执行差集操作,同样地,也可使用方法 difference() 完成。
对称差
两个集合的对称差是只属于其中一个集合,而不属于另一个集合的元素组成的集合。
使用 ^
操作符执行差集操作,同样地,也可使用方法 symmetric_difference() 完成。
>>> a = set('abcd')
>>> b = set('cdef')
>>>
>>> # 子集
...
>>> c =set('ab')
>>> c <a
True
>>> c.issubset(a)
True
>>>
>>> c < b
False
>>>
>>>
>>> # 并集
...
>>> a | b
{'e', 'b', 'd', 'a', 'f', 'c'}
>>> a.union(b)
{'e', 'b', 'd', 'a', 'f', 'c'}
>>>
>>>
>>>
>>> # 交集
...
>>> a & b
{'d', 'c'}
>>> a.intersection(b)
{'d', 'c'}
>>>
>>>
>>>
>>> # 差集
...
>>> a - b
{'a', 'b'}
>>> b.difference(a)
{'e', 'f'}
>>>
>>>
>>>
>>> # 对称差
...
>>> a ^ b
{'e', 'b', 'a', 'f'}
>>> a.symmetric_difference(b)
{'e', 'b', 'a', 'f'}
4. 集合的基本操作
1、添加元素
方法一:
s.add( x )
将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。
方法二:
s.update( x )
可以添加元素,且参数可以是列表,元组,字典等
x 可以有多个,用逗号分开。
>>> a = set('abcd')
>>> b = set('cdef')
>>>
>>>
>>>
>>> a.add('xyz')
>>> a
{'b', 'd', 'a', 'c', 'xyz'}
>>>
>>>
>>> a.update(b)
>>> a
{'e', 'b', 'd', 'a', 'f', 'c', 'xyz'}
>>> b.update([1,2],[3,4])
>>> b
{'e', 1, 'd', 2, 3, 4, 'f', 'c'}
2、从集合中删除元素或删除集合
方法一:
s.remove( x )
将元素 x 添加到集合 s 中移除,如果元素不存在,则会发生错误。
方法二:
s.discard( x )
移除集合中的元素,且如果元素不存在,不会发生错误。
方法三:
s.pop()
也可以设置随机删除集合中的一个元素。
方法四:
s.clear()
清空集合 s。
>>> s = {'P', 'y', 't', 'h', 'o', 'n'}
>>>
>>> s.remove('h') # 删除一个存在的元素
>>> s
{'n', 'o', 't', 'P', 'y'}
>>> s.remove('w') # 删除一个不存在的元素(引发错误)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'w'
>>>
>>>
>>> s.discard('t') # 去掉一个存在的元素
>>> s
{'n', 'o', 'P', 'y'}
>>> s.discard('w') # 去掉一个不存在的元素(正常)
>>> s
{'n', 'o', 'P', 'y'}
>>>
>>>
>>> s.pop() # 随机弹出一个元素
'n'
>>> s
{'o', 'P', 'y'}
>>>
>>>
>>> s.clear() # 清空集合
>>> s
set()
>>>
>>>
>>> del s # 删除集合
>>> s
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 's' is not defined
3. 计算集合元素个数
语法格式如下:
len(s)
计算集合 s 元素个数。
>>> s = {'P', 'y', 't', 'h', 'o', 'n'}
>>>
>>> len(s)
6
4. 判断元素是否在集合中存在
语法格式如下:
x in s
判断元素 s 是否在集合 x 中存在,存在返回 True,不存在返回 False。
>>> s = {'P', 'y', 't', 'h', 'o', 'n'}
>>>
>>> 'o' in s
True
>>> 'z' in s
False
5. 集合的方法
方法 | 描述 |
---|---|
add() | 将元素添加到集合中 |
clear() | 删除集合中的所有元素 |
copy() | 返回集合的浅拷贝 |
difference() | 将两个或多个集合的差集作为一个新集合返回 |
difference_update() | 从这个集合中删除另一个集合的所有元素 |
discard() | 删除集合中的一个元素(如果元素不存在,则不执行任何操作) |
intersection() | 将两个集合的交集作为一个新集合返回 |
intersection_update() | 用自己和另一个的交集来更新这个集合 |
isdisjoint() | 如果两个集合有一个空交集,返回 True |
issubset() | 如果另一个集合包含这个集合,返回 True |
issuperset() | 如果这个集合包含另一个集合,返回 True |
pop() | 删除并返回任意的集合元素(如果集合为空,会引发 KeyError) |
remove() | 删除集合中的一个元素(如果元素不存在,会引发 KeyError) |
symmetric_difference() | 将两个集合的对称差作为一个新集合返回 |
symmetric_difference_update() | 用自己和另一个的对称差来更新这个集合 |
union() | 将集合的并集作为一个新集合返回 |
update() | 用自己和另一个的并集来更新这个集合 |
6. 集合与内置函数
函数 | 描述 |
---|---|
all() | 如果集合中的所有元素都是 True(或者集合为空),则返回 True。 |
any() | 如果集合中的所有元素全部为 False,则返回 False,如果有一个为 True,则返回 True。 |
enumerate() | 返回一个枚举对象,其中包含了集合中所有元素的索引和值(配对)。 |
len() | 返回集合的长度(元素个数) |
max() | 返回集合中的最大项 |
min() | 返回集合中的最小项 |
sorted() | 从集合中的元素返回新的排序列表(不排序集合本身) |
sum() | 返回集合的所有元素之和 |