集set
- set是可变的、无须的、不会重复的元素集合
set的元素特点
- set的元素必须可以hash
- set的元素不可索引
- set的元素可以迭代
set集的创建
set(range(9))s1 = {1,2,'a'}
- 不可使用s1 = {}来创建,因为{}为字典的创建方式
- 使用{}方式创建参数必须为可hash对象
- 使用set()方式创建参数必须为可迭代对象,此方式会将迭代对象解析为可hash元素
In [9]: set(1,2)TypeError: set expected at most 1 arguments, got 2In [11]: s1 = {1,2,[2,3]}TypeError: unhashable type: 'list'
set增加元素
add(elem)
- 增加一个元素到set中
- 如果元素存在,什么都不做
update(*others)
- 合并其他元素到set集中
- 参数others必须为可迭代对象,可为多个可迭代对象
- 原处修改
# addIn [16]: s1Out[16]: {1, 2, 4}In [17]: s1.add(5)In [18]: s1.add(1)In [19]: s1Out[19]: {1, 2, 4, 5}# updateIn [20]: s2 = {'a', 2, '2', 'c'}In [21]: s1.update(s2)In [22]: s1Out[22]: {1, 2, '2', 4, 5, 'a', 'c'}
set移除元素
remove(elem)
- 从set中移除指定的元素
元素不存在,抛出keyError异常
- remove时会根据给定的值的hash来做移除操作,故如不存在会抛出keyError异常
discard(elem)
- 从set中移除指定的元素
- 元素不存在,什么都不做
pop()—>item
移除并返回任意的元素。
- 因set中元素为无序的,故为随机元素
- 空集使用pop返回keyError异常
clear()
- 移除所有元素
In [23]: s1.remove(2)In [24]: s1Out[24]: {1, '2', 4, 5, 'a', 'c'}In [25]: s1.remove(2)KeyError: 2In [26]: s1.discard(2)
set修改元素
修改
- set没有修改元素的操作
- 要么删除,要么添加
查询
- set为非线性结构,无法索引
遍历
- 可迭代所有元素
成员运算符
- in和not in可判断元素是否在set中
- 判断依据为hash判断,效率很高,时间复杂度为O(1)
set效率
- 线性结构查询时间复杂度时O(n),即随着数据规模增大而耗时增加
- set、dict等结构,内部使用hash值作为key,不会因数据规模增大而增加耗时
可hash
- 数值型int、float
- 布尔型
- 字符串string、bytes
- tuple
- None
- set的元素必须是可hash的
注:线性结构查询推荐使用索引(index)查询
set运算
并集
- 将两个集合中所有的元素合并在一起
union(*others)
- 返回多个集合合并后的结果,返回一个新的对象
- |运算符重载,等同于union
update(*others)
- 多个集合合并,原地修改
- |=,等同于update
交集
- 集合A和B,由所有属于A即属于B的元素组成
intersection(*others)
- 返回多个集合的交集。返回一个新的对象
- & 等同intersection
intersection_update(*other)
- 获取和多个集合的交集,原处修改
- &=,等同于intersection_update
差集
- 集合A和B,由所有属于A且不属于B的元素组成
Difference(*others)
- 返回多个集合的差集,返回一个新的对象
- -等同于difference
difference_update(*other)
- 获取多个集合 的差集并在原处修改
- -= 等同于difference_update
对称差集
- 集合A和B,由所有不属于A且不属于B的交集元素组成的集合,记作(A-B) u (B-A)
symmetric_differece(other)
- 返回和另一个集合的差集
^
- 等同于symmetric_differece
symmetric_differece_update(other)
- 获取和另一个集合的差集并就地修改
^=
- 等同symmetric_differece_update
集合运算
issubset(other)
- 判断当前集合是否是另一个集合的子集
