python 集合类型
前言
环境
win10
python 3.10.11
集合类型
集合中的元素是无序的而且且没有重复的。集合中的元素必须是可哈希的(hashable),大多数 Python 中的不可变内置对象都是可哈希的;可变容器(例如列表或字典)都不可哈希
除了支持len()或in操作,集合不支持其它常见的序列操作(如切片 索引)
目前有两种内置集合类型,set 和 frozenset。
set 类型是可变的 --- 但其中的元素只能是不可变类型,所以不能包含set集合与列表等。 其元素可以使用 add() 和 remove() 这样的方法来增删改变。 由于是可变类型,它没有哈希值,不能被用作字典的键,不能放在其他集合中
frozenset 类型是不可变的 hashable(可哈希的) --- 其中的元素在被创建后不能再改变;因此它可以被用作字典的键或放在其它集合中
set类型的可变集合
该集合是由python的内置类set实现的
由set类创建集合对象时,参数是可选的,参数的为可迭代对象,如下
由构造器来构造集合
由集合推导来构造集合
由花括号定义集合(不能定义空集合)
frozenset类型的不可变集合
与set类型集合的构造类似,是由内置类frozenset实现的
class frozenset([iterable])
如上,s2本身是一个set类型的集合,该集合中又有frozenset类型的集合
但反过来,frozenset类型的集合中是不能包含set类型集合的
set类型集合与frozenset类型集合通用的操作
len(s)
返回集合 s 中的元素数量
ele in s
元素ele 是否存在于集合s中
ele not in s
元素ele 是否存在于集合s中
集合间的各种操作,如交集、并集等
s.union(*others)
或者运算符 |, s | other | ...
返回一个新集合即两个集合的并集
s.intersection(*others)
或者运算符&, s & other & ...
返回一个新集合即两个集合的交集
s.difference(*others)
或运算符 -, set - other - ...
返回一个新集合,新集合的元素为存在于原集合但不存在于其它集合
s.symmetric_difference(other)
或运算符 ^, s ^ other
返回一个新集合,新集合中的元素只能存在于其中一个集合中,但不能同时存在于2者中
s.isdisjoint(other)
如果集合s中没有与 other 共有的元素则返回 True。 当且仅当两个集合的交集为空集合时,两者为不相交集合,这时返回True
s.issubset(other)
s <= other
检测是否集合s中的每个元素都在 other 之中
s < other
检测集合是否为 other 的真子集,即 s <= other and s != other
s.issuperset(other)
s >= other
检测是否 other 中的每个元素都在集合之中,和issubset刚好相反
s > other
检测集合s是否为 other 的真超集,即 s >= other and s != other
s.copy()
返回原集合的浅拷贝
适用于set类型集合的操作但不适用于frozenset类型的集合
update(obj):
向集合中添加元素,参数为可迭代对象或其他集合,会将可迭代对象或其他集合中的元素添加进去
add(ele):
向集合中添加元素ele,和update()不同的是,参数ele即是添加的进去的元素
set类型集合中元素必须是不可变的(可散列的),不能包含其他集合
如果要在集合中包含其他集合,可用frozenset类型,表示不可变(可散列)的集合
remove(ele)
对应于add(ele),如果 elem 不存在于集合中则会引发 KeyError
pop()
从集合中移除并返回任意一个元素。 如果集合为空则会引发 KeyError
discard(ele)
如果元素 elem 存在于集合中则将其移除
clear()
从集合中移除所有元素