python中的集合

集合,简称集。由任意个元素构成的集体。高级语言都实现了这个非常重要的数据结构类型。

Python中,它是可变的、无序的、不重复的元素的集合

set() -> new empty set object

set(iterable) -> new set object

元素性质

去重:在集合中,所有元素必须相异

无序:因为无序,所以不可索引

可哈希:Python集合中的元素必须可以hash,即元素都可以使用内建函数hash

​ 目前学过不可hash的类型有:list、set、bytearray

可迭代:set中虽然元素不一样,但元素都可以迭代出来

增加

add(elem)

​ 增加一个元素到set中

​ 如果元素存在,什么都不做

update(*others)

​ 合并其他元素到set集合中来

​ 参数others必须是可迭代对象

​ 就地修改

s = set()
s.add(1)
s.update((1,2,3), [2,3,4])

删除

remove(elem)

​ 从set中移除一个元素

​ 元素不存在,抛出KeyError异常.

discard(elem)

​ 从set中移除一个元素

​ 元素不存在,什么都不做

pop() -> item

​ 移除并返回任意的元素。为什么是任意元素?

​ 空集返回KeyError异常

clear()

​ 移除所有元素

修改

集合类型没有修改。因为元素唯一。如果元素能够加入到集合中,说明它和别的元素不一样。

所谓修改,其实就是把当前元素改成一个完全不同的元素,就是删除加入新元素

遍历

只要是容器,都可以遍历元素。但是效率都是O(n)

成员运算符in

print(10 in [1, 2, 3])
False
print(10 in {1, 2, 3})
False
效率非常高

可哈希

数值型int、float、complex

布尔型True、False

字符串string、bytes

tuple

None

以上都是不可变类型,都是可哈希类型,hashable

set的元素必须是可hash的

集合概念

全集

​ 所有元素的集合。例如实数集,所有实数组成的集合就是全集

子集subset和超集superset

​ 一个集合A所有元素都在另一个集合B内,A是B的子集,B是A的超集

真子集和真超集

​ A是B的子集,且A不等于B,A就是B的真子集,B是A的真超集

并集:多个集合合并的结果

交集:多个集合的公共部分

差集:集合中除去和其他集合公共部分

并集

将两个集合A和B的所有的元素合并到一起,组成的集合称作集合A与集合B的并集

union(*others)返回和多个集合合并后的新的集合

|运算符重载,等同union

update(*others)和多个集合合并,就地修改

|=等同update,修改的是左边的集合

交集

集合A和B,由所有属于A且属于B的元素组成的集合

intersection(*others)返回和多个集合的交集

&等同intersection

intersection_update(*others)获取和多个集合的交集,并就地修改

&=等同intersection_update,修改的左边的集合

差集

集合A和B,由所有属于A且不属于B的元素组成的集合

difference(*others)返回和多个集合的差集

-等同difference

difference_update(*others)获取和多个集合的差集并就地修改

-=等同difference_update

对称差集

集合a和b,由所有不属于A和B的交集元素组成的集合,记作(a-b)∪(b-a)

symmetric_differece(other)返回和另一个集合的对称差集

^等同symmetric_differece

symmetric_differece_update(other)获取和另一个集合的对称差集并就地修改

^=等同symmetric_differece_update

其它集合运算

issubset(other)、<=判断当前集合是否是另一个集合的子集

set1 < set2判断set1是否是set2的真子集

issuperset(other)、>=判断当前集合是否是other的超集

set1 > set2判断set1是否是set2的真超集

isdisjoint(other)当前集合和另一个集合没有交集,没有交集,返回True

posted @ 2022-11-23 15:57  厚礼蝎  阅读(223)  评论(0编辑  收藏  举报