浅谈Python集合运算
Python提供了多种适用于集合的运算。由于集合是容器,因此内置的len函数可以将一个集合作为其单个参数,并返回该集合对象中项目的数量。集合是可迭代的,因此Python开发者可以将其传递给包含一个可迭代参数的任何函数或方法。在这种情况下,集合中的项目是按照某些任意顺序进行迭代的。例如,对于任意集合S,min(S)将返回S中的最小项目。
集合成员
k in S运算符可以检查对象k是否是集合S中的一个项目。如果是,则返回True,如果不是,则返回False。与此类似,k not in S相当于not (k in S)
集合方法
集合对象提供了如下表所示的一些方法。非变异方法将返回一个结果,并且不改变其应用的对象,还可以对类型为frozenset的实例调用该方法,而变异方法可能会改变其应用的对象,并且只能对类型为set的实例调用该方法。在下表中,S和S1表示任何集合对象,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) |
返回在集合S或S1中,但是不同时在两个集合中的所有项目组成的集合 |
S.union(S1) |
返回在集合S、S1或同时在这两个集合中的所有项目组成的集合 |
变异方法 |
|
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)一样。