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