用户:Xyy23330121/Python/集合
Python 中,集合是无序的、由多个不同元素组成的结构。其中 set 是可变的,而 frozenset 是不可变的。因此,frozenset 可以作为字典的键,而 set 不能。
当尝试向集合添加集合中已有的元素,或者在创建集合时使用了重复的元素。则只会保留重复元素中的一个,其余的会被忽略。
集合是可迭代对象,即便它没有明确的顺序。进行迭代时,它会按照一个随机的顺序迭代元素,直至所有元素都进行过迭代为止。
创建集合
编辑Python 创建集合主要有三种方式:
- 字面格式:
newSet = {'str', 1, False}
- 推导式:
newSet = {c for c in 'Python' if c not in 'py'}
- set函数:对任意可迭代对象
iterable
,用set(iterable)
或frozenset(iterable)
特别的,可以用set()
或frozenset()
创建空字典。
嵌套
编辑列表、元组等结构也可以作为集合的元素出现。特别的,集合也可以作为集合的元素。
集合的操作
编辑集合元素数量
编辑len(s)
编辑返回集合 s
中元素的数量。
属于 / 不属于
编辑in / not in
编辑可以用 x in s
或 x not in s
判断元素是否在集合中。比较运算符可以串联。
含于 / 真含于
编辑s <= other
编辑如果集合 s
含于集合 other
则返回 True
。反之返回 False
。比较运算符可以串联。
s.issubset(other)
编辑同 s <= other
。但此时 other
可以为任何可用 set
函数或 frozenset
函数转变为集合的类型。
s < other
编辑如果集合 s
真含于集合 other
则返回 True
。反之返回 False
。比较运算符可以串联。
s >= other
编辑如果集合 other
含于集合 s
则返回 True
。反之返回 False
。比较运算符可以串联。
s.issuperset(other)
编辑同 s >= other
。但此时 other
可以为任何可用 set
函数或 frozenset
函数转变为集合的类型。
s > other
编辑如果集合 other
真含于集合 s
则返回 True
。反之返回 False
。比较运算符可以串联。
交集
编辑s.isdisjoint(other)
编辑如果集合 s
和集合 other
交集为空,则返回 True
。反之返回 False
。
s & other & ...
编辑返回该表达式中所有集合的交集。返回的集合是 set
还是 frozenset
,取决于 s
的类型。
s.intersection(other, ...)
编辑同 s & other & ...
。但此时 other
可以为任何可用 set
函数或 frozenset
函数转变为集合的类型。
并集
编辑s | other | ...
编辑返回该表达式中所有集合的并集。返回的集合是 set
还是 frozenset
,取决于 s
的类型。
s.union(other, ...)
编辑同 s | other | ...
。但此时 other
可以为任何可用 set
函数或 frozenset
函数转变为集合的类型。
集合的差
编辑s - other - ...
编辑如果集合 s
和其它所有集合 other, ...
的差。即:返回一个新集合,该集合包含在 s
中、但不在 other | ...
中的元素。
返回的集合是 set
还是 frozenset
,取决于 s
的类型。
s.difference(other, ...)
编辑同 s - other - ...
。但此时 other
可以为任何可用 set
函数或 frozenset
函数转变为集合的类型。
集合的对称差
编辑s ^ other
编辑返回一个集合,该集合中的元素属于 s.union(other)
但不属于 s.difference(other)
返回的集合是 set
还是 frozenset
,取决于 s
的类型。
s.symmetric_difference(other)
编辑同 s ^ other
。但此时 other
可以为任何可用 set
函数或 frozenset
函数转变为集合的类型。
s.copy()
编辑返回集合 s
的拷贝。
可变集合的特有操作
编辑以下操作中,s
均为 set
对象。而不能是 frozenset
对象
赋值并
编辑s |= other | ...
编辑在集合 s
中添加所有属于 other | ...
的元素。
s.update(other, ...)
编辑同 s |= other | ...
。但此时 other
可以为任何可用 set
函数或 frozenset
函数转变为集合的类型。
赋值交
编辑s &= other & ...
编辑从集合 s
中移除所有不属于 other & ...
的元素。
s.intersection_update(other, ...)
编辑同 s &= other & ...
。但此时 other
可以为任何可用 set
函数或 frozenset
函数转变为集合的类型。
赋值差
编辑s -= other | ...
编辑从集合 s
中移除所有属于 other | ...
的元素。
s.difference_update(other, ...)
编辑同 s -= other | ...
。但此时 other
可以为任何可用 set
函数或 frozenset
函数转变为集合的类型。
赋值对称差
编辑s ^= other
编辑更新 s
,使其等于 s ^ other
s.symmetric_difference_update(other)
编辑同 s ^= other
。但此时 other
可以为任何可用 set
函数或 frozenset
函数转变为集合的类型。
添加 / 删除元素
编辑s.add(elem)
编辑将 elem
添加到集合 s
中。
s.remove(elem)
编辑将 elem
从集合 s
中移除,如果集合中没有 elem
,则报错 KeyError
。
s.iscard(elem)
编辑将 elem
从集合 s
中移除。如果集合中没有 elem
,则不做任何操作。
s.pop(elem)
编辑从集合 s
中任意移除一个元素并返回。如果集合为空,则报错 KeyError
。
s.clear()
编辑将集合 s
变为空集。