集合是一个无序、不重复元素集。
集合用 {}
标识,内部元素用 逗号 分隔。
可以使用大括号 {}
或者 set() 函数创建集合,注意: 要创建一个空集合,必须使用 set() 而不是 {}
,因为 {}
用于创建一个空字典。
>>> s = {5, 'Python', 1+2j}
>>> type(s)
<class 'set'>
既然集合是无序的,那么索引就没有任何意义,也就是说,切片操作符 [] 不起作用。
>>> s = {"Java", "Python", "PHP"}
>>> s
{'PHP', 'Python', 'Java'} # 无序
>>>
>>> s[1] # 生成错误,不支持索引
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing
不重复,是指集合中相同的元素会被自动过滤掉,只保留一份。
>>> s = {"PHP", "Python", "Java", "Python", "PHP"}
>>> s
{'PHP', 'Python', 'Java'} # 去重
除了去重之外,还常用于成员关系的测试。
>>> if ('Python' in s) :
... print('Python 在集合中')
... else :
... print('Python 不在集合中')
...
Python 在集合中
集合之间也可执行运算,例如:并集、差集、交集。
>>> a = set('abcdefg')
>>> b = set('abghijk')
>>>
>>> a
{'b', 'f', 'e', 'd', 'a', 'c', 'g'}
>>> b
{'b', 'k', 'h', 'i', 'j', 'a', 'g'}
>>>
>>> a - b # 差集
{'f', 'c', 'd', 'e'}
>>>
>>> a | b # 并集
{'b', 'k', 'f', 'h', 'i', 'e', 'j', 'd', 'a', 'c', 'g'}
>>>
>>> a & b # 交集
{'b', 'a', 'g'}
>>>
>>> a ^ b # 对称差 - 不同时存在的元素
{'e', 'c', 'k', 'f', 'h', 'i', 'j', 'd'}
对称差公式:A Δ B = (A − B) ∪(B − A)
。也可表示为两个集合的并集减去它们的交集:A Δ B = (A ∪B) − (A ∩B)
。