Python集合(Set)类型

集合是没有重复元素的无序集合。 基本用途包括成员检测和消除重复条目等。 Set对象还支持并集、交集、差和等数学运算。

创建集合

大括号或set()函数可用于创建集合。 注意:要创建一个空集,您必须使用set(),而不是{}; 后者创建一个空字典,我们将在下一节讨论这种数据结构。

>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)                      # 重复元素被删除
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket                 # 成员检测效率很高
True
>>> 'crabgrass' in basket
False

与其他集合一样,集合支持x in setlen(set)for x in set。 作为一个无序集合,集合不记录元素位置或在指定位置插入。 因此,集合不支持索引、切片或其他类似序列的行为。

>>> basket = {'apple', 'pear', 'orange', 'banana'}
>>> basket.add("grape")
>>> basket
{'apple', 'grape', 'pear', 'banana', 'orange'}
>>> 'Grape' in basket
True
>>> len(basket)
5

并集、交集、差集

并集

使用集合的union(*others)方法计算并集,它返回一个包含集合中的元素和所有其他元素的新集合。它等效于set | other | ...

>>> basket = {'apple', 'pear', 'orange', 'banana'} o9878u
>>> box = {'apple', 'banana', 'peach', 'apricot'}
>>> basket | box
{'apple', 'apricot', 'peach', 'pear', 'banana', 'orange'}
>>> basket.union(box)
{'apple', 'apricot', 'peach', 'pear', 'banana', 'orange'}

交集

集合提供了intersection(*others)方法计算交集,它返回一个新的集合,其中包含集合和所有其他集合共有的元素。它等效于set & other & ...

>>> basket = {'apple', 'pear', 'orange', 'banana'}
>>> box = {'apple', 'banana', 'peach', 'apricot'}
>>> basket & box
{'apple', 'banana'}
>>> basket.intersection(box)
{'apple', 'banana'}

集合还提供了许检测集合关系的方法:

不相交 isdisjoint(other),如果集合与其他集合没有相同的元素,则返回True。 集合是不相交的当且仅当它们的交集是空集。

>>> basket = {'apple', 'pear', 'orange'}
>>> box = {'banana', 'peach', 'apricot'}
>>> basket.isdisjoint(box)
True

子集 issubset(other),测试集合中的每个元素是否都在其他集合中。等效于set <= other

与此类似的还有set < other,也就是set <= other and set != other

>>> basket = {'apple', 'pear', 'orange', 'banana'}
>>> box = {'apple', 'banana', 'pear'}
>>> basket.issubset(box)
True
>>> box < basket
>>> True
>>> box <= basket
>>> True

超集 issuperset(other) 测试other中的每个元素是否都在集合中。等效于set >= other

与此类似的还有set > other,也就是set >= other and set != other

>>> basket = {'apple', 'pear', 'orange', 'banana'}
>>> box = {'apple', 'banana', 'pear'}
>>> basket.issuperset(box)
True
>>> basket > box
>>> True
>>> basket >= box
>>> True

差集

差集 difference(*others) 返回一个新集合,该集合中的元素不在其他集合中。等效于set - other - ...

>>> basket = {'apple', 'pear', 'orange', 'banana'}
>>> box = {'apple', 'banana', 'peach', 'apricot'}
>>> basket.difference(box)
{'orange', 'pear'}
>>> basket - box
{'orange', 'pear'}

对称差 symmetric_difference(other) 返回一个新集合,其中的元素包含在集合中或other集合中,但不能同时包含在两个集合中。等效于set ^ other

>>> basket = {'apple', 'pear', 'orange', 'banana'}
>>> box = {'apple', 'banana', 'peach', 'apricot'}
>>> basket.symmetric_difference(box)
{'apricot', 'peach', 'pear', 'orange'}
>>> basket ^ box
{'apricot', 'peach', 'pear', 'orange'}