谈Python集合运算


Python #集合运算2012-11-17 22:09

Python提供了多种适用于集合的运算。由于集合是容器,因此内置的len函数可以将一个集合作为其单个参数,并返回该集合对象中项目的数量。集合是可迭代的,因此Python开发者可以将其传递给包含一个可迭代参数的任何函数或方法。在这种情况下,集合中的项目是按照某些任意顺序进行迭代的。例如,对于任意集合Smin(S)将返回S中的最小项目。

集合成员

k in S运算符可以检查对象k是否是集合S中的一个项目。如果是,则返回True,如果不是,则返回False。与此类似,k not in S相当于not (k in S)

集合方法

集合对象提供了如下表所示的一些方法。非变异方法将返回一个结果,并且不改变其应用的对象,还可以对类型为frozenset的实例调用该方法,而变异方法可能会改变其应用的对象,并且只能对类型为set的实例调用该方法。在下表中,SS1表示任何集合对象,x表示任何可哈希的对象。

方法

说明

非变异方法

 

S.copy( )

返回集合的一个简化副本〔该副本中的项目是集合S中的相同对象,但不是完全的副本)

S.difference(S1)

返回在集合S中,但是不在集合S1中的所有项目组成的集合

S.intersection(S1)

返回在集合S中,同时也集合S1中的所有项目组成的集合

S.issubset(S1)

如果集合S中的所有项目也都在集合S1中,则返回True,否则返回False

S.issuperset(S1)

如果集合S1中的所有项目也都在集合S中,则返True,否则返同False(S1.issubset(S)类似)

S.symmetric_difference(S1)

返回在集合SS1中,但是不同时在两个集合中的所有项目组成的集合

S.union(S1)

返回在集合SS1或同时在这两个集合中的所有项目组成的集合

变异方法

 

S.add(x)

x添加为集合S中的一个项目;如果x已经是集合S中的一个项目,则不对集合进行任何操作

S.clear( )

从集合S中删除所有项目,使得S为空自集合

S.discard(x)

删除集合S中的项目x;如果x并不是集合S中的一个项目,则不对集合进行任何操作

S.pop( )

删除并返回集合S中的任意一个项目

S.remove(x)

删除集合S中的项目x;如果 x不是集合S中的项目,引发一个KeyError异常

除了pop之外,集合对象的所有变异方法都返回None

pop方法可以用于对集合进行破坏性的迭代,并且几乎不消耗额外内存。当Python开发者想要的是在执行循环操作的同时“消耗掉”集合(减少集合中的项目)的话,内存的节省使得pop可以用来对巨大的集合执行循环操作。

集合还包含名为difference_update, intersection_update, symmetric_difference_update, update (对应于非变异方法union)的变异方法。这些变异方法都可以执行与对应的非变异方法相同的操作,但是这些方法要在原地执行操作、改变所调用的集合,并返回None。这4个非变异方法也可以使用运算符语法进行访问:分别是S-S1, S&S1, S^S1, S|S1,对应的变异方法也可以使用增量赋值语法进行访问:分别是S-=S1, S&=S1, S^=S1, S|=S1。在使用运算符或增量赋值语法时,两个操作数都必须是集合或者固定集合(frozenset)。不过,在调用命名方法时,参数S1可以是由可哈希的项目组成的任意迭代,并且其语义就像传递的参数为set(S1)一样。


相关文章

粤ICP备11097351号-1