Python中的set集合
集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 2
In [11]: s1 = {1,2,[2,3]}
TypeError: unhashable type: 'list'
set增加元素
- add(elem)
- 增加一个元素到set中
- 如果元素存在,什么都不做
- update(*others)
- 合并其他元素到set集中
- 参数others必须为可迭代对象,可为多个可迭代对象
- 原处修改
# add
In [16]: s1
Out[16]: {1, 2, 4}
In [17]: s1.add(5)
In [18]: s1.add(1)
In [19]: s1
Out[19]: {1, 2, 4, 5}
# update
In [20]: s2 = {'a', 2, '2', 'c'}
In [21]: s1.update(s2)
In [22]: s1
Out[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]: s1
Out[24]: {1, '2', 4, 5, 'a', 'c'}
In [25]: s1.remove(2)
KeyError: 2
In [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)
- 判断当前集合是否是另一个集合的子集

浙公网安备 33010602011771号