python8:集合

来源:互联网 发布:淘宝化妆品韩国女模特 编辑:程序博客网 时间:2024/05/16 17:22
集合对象是一组无序排列的可哈希的值,集合中不包含重复的值。通常用于包含成员测试、移除序列中的重复元素和数学操作运算,例如:交集、联合、差异和对称差等。
集合支持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()方法的参数可以是一个集合。

0 0