集合支持in和not in操作,len()操作,和在for循环中迭代集合成员。但由于集合是无序的,你不能为集合创建索引、切片、或者其他类似的序列行为。
集合包含可变集合(set)和不可变集合(frozenset)。set不能用于字典的键(key),也不能做为其他集合中的元素。frozenset则可以作为字典的键和其它集合中的成员。
构造集合
通过下面的工厂方法来构造集合和不可变集合:
class set([iterable])
class frozenset([iterable])
方法返回一个集合和不可变集合,数据来自于iterable,集合的元素必须是可哈希的(注)。为了表示集合的集合,内部的集合必须是不可变集合。如果不指定iterable,则得到一个空集合。
注:
一个对象是可哈希的,表示被对象在它的整个生命周期内有唯一的哈希值(它需要实现__hash__()方法),并且能和其它对象比较(它需要实现__eq__()方法)。相等可哈希对象必须具有相等的哈希值。
集合公共方法
集合具有一些set和frozenset公共的方法。
len(s)
返回集合s的长度。
x in s
测试x是否是s的成员。
x not in s
测试x是否不是s的成员。
isdisjoint(other)
如果集合和other没有公共成员,则返回True。集合是disjoint说明集合的交集为空。
issubset(other)或set <= other
测试集合中的每个原始是否都在other中。
set < other
测试set是否为other的子集。
issuperset(other)或set >= other
测试other中的每个元素是否都在set中。
set > other
测试other是否为set的一个子集。
union(other, ...)或set | other | ...
返回一个新的set,其中包含set和所有other集合的元素。
intersection(other, ...)或set & other & ...
返回一个新的set,其中包含set和所有other集合的交集。
difference(other, ...)或set - other - ...
返回一个新的set,其中包含在set中但不在所有other集合中的元素(差集)。
symmetric_difference(other)或set ^ other
返回一个新的set,其中元素要么在set中,要么在other中,但不同时在两者中。
copy()
返回一个新的集合,元素为s的浅拷贝。
注意:
union()、intersection()、difference()、symmetric_difference()、issubset()和issuperset()方法可以接受任何迭代器作为参数,而对应这些方法的操作符方法则必须使用集合,例如:
>>> set('abc') & 'cbs'
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
set('abc') & 'cbs'
TypeError: unsupported operand type(s) for &: 'set' and 'str'
>>> set('abc').intersection('cbs')
{'c', 'b'}
>>> set('abc') & set('cbs')
{'c', 'b'}
set和frozenset都支持集合比较。集合A和B中包含相同的元素则认为A和B是相等的;集合A是B的子集,且不等B,则认为A小于B;集合B是A的子集,且不等A,则认为A大于B。
set和frozenset的比较只基于他们的成员,如:
>>> set('abc') == frozenset('abc')
True
可变集合方法
下面的方法仅在可变集合(set)中可用。
update(other, ...)或set |= other | ...
更新集合,添加所有other集合的元素。
intersection_update(other, ...)或set &= other & ...
更新集合,仅保留该集合和所有other集合中共有的元素。
>>> a = set('abcdefg')
>>> a &= set('bcg456')
>>> a
{'c', 'b', 'g'}
difference_update(other, ...)或set -= other | ...
更新集合,移除在所有other集合中存在的元素。
symmetric_difference_update(other)或set ^= other
更新集合,仅保留set和other集合中不共有的元素。
>>> a = set('abcdefg')
>>> a ^= set('bcg456')
>>> a
{'5', '4', '6', 'a', 'e', 'd', 'f'}
add(elem)
添加指定元素到集合。
remove(elem)
移除指定元素,如果元素不在集合中,则抛出KeyError。
discard(elem)
如果elem存在,则移除它。
pop()
移除并返回集合中的任意一个元素,如果集合为空,则抛出KeyError。
clear()
移除集合中所有元素。
注意:
update()、intersection_update()、difference_update()和symmetric_difference_update()方法可以接受任何迭代器作为参数。
__contains__()、remove()和discard()方法的参数可以是一个集合。