python 集合类型

前言

环境

win10
python 3.10.11

集合类型

集合中的元素是无序的而且且没有重复的。集合中的元素必须是可哈希的(hashable),大多数 Python 中的不可变内置对象都是可哈希的;可变容器(例如列表或字典)都不可哈希
除了支持len()或in操作,集合不支持其它常见的序列操作(如切片 索引)

目前有两种内置集合类型,set 和 frozenset。
set 类型是可变的 --- 但其中的元素只能是不可变类型,所以不能包含set集合与列表等。 其元素可以使用 add() 和 remove() 这样的方法来增删改变。 由于是可变类型,它没有哈希值,不能被用作字典的键,不能放在其他集合中
frozenset 类型是不可变的 hashable(可哈希的) --- 其中的元素在被创建后不能再改变;因此它可以被用作字典的键或放在其它集合中

set类型的可变集合

该集合是由python的内置类set实现的

image

由set类创建集合对象时,参数是可选的,参数的为可迭代对象,如下
由构造器来构造集合
image

由集合推导来构造集合
image

由花括号定义集合(不能定义空集合)

image

frozenset类型的不可变集合

与set类型集合的构造类似,是由内置类frozenset实现的

class frozenset([iterable])

image
image

如上,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 | ...
返回一个新集合即两个集合的并集
image

s.intersection(*others)
或者运算符&, s & other & ...
返回一个新集合即两个集合的交集
image

s.difference(*others)
或运算符 -, set - other - ...
返回一个新集合,新集合的元素为存在于原集合但不存在于其它集合

image

s.symmetric_difference(other)
或运算符 ^, s ^ other
返回一个新集合,新集合中的元素只能存在于其中一个集合中,但不能同时存在于2者中

image

s.isdisjoint(other)
如果集合s中没有与 other 共有的元素则返回 True。 当且仅当两个集合的交集为空集合时,两者为不相交集合,这时返回True
image

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):
向集合中添加元素,参数为可迭代对象或其他集合,会将可迭代对象或其他集合中的元素添加进去
image

add(ele):
向集合中添加元素ele,和update()不同的是,参数ele即是添加的进去的元素
image
image

set类型集合中元素必须是不可变的(可散列的),不能包含其他集合
如果要在集合中包含其他集合,可用frozenset类型,表示不可变(可散列)的集合

remove(ele)
对应于add(ele),如果 elem 不存在于集合中则会引发 KeyError

pop()
从集合中移除并返回任意一个元素。 如果集合为空则会引发 KeyError

discard(ele)
如果元素 elem 存在于集合中则将其移除

clear()
从集合中移除所有元素

posted @ 2023-12-02 21:54  工作手记  阅读(23)  评论(0编辑  收藏  举报