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