集合set
集set
可变,无序,不重复的元素的集合
set集合
collection 集合类型
s = {} #dict
list 不可以放入其中 # 元素要求必须可hash
定义方法:
-
s1 = set(iterable) 可迭代单一值 或空集合
-
s2 = {} {}中不可放入不可hash对象
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'} >>> print(basket) # 这里演示的是去重功能 {'orange', 'banana', 'pear', 'apple'} >>> 'orange' in basket # 快速判断元素是否在集合内 True >>> 'crabgrass' in basket False
运算方法
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a
{'a', 'r', 'b', 'c', 'd'}
>>> a - b # 集合a中包含而集合b中不包含的元素
{'r', 'd', 'b'}
>>> a | b # 集合a或b中包含的所有元素
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b # 集合a和b中都包含了的元素
{'a', 'c'}
>>> a ^ b # 不同时包含于a和b的元素
{'r', 'd', 'b', 'm', 'z', 'l'}
集合推导式
>>>a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}
去重
整型在set中无论在元组或直接在set中,重复会被去掉
同类型同hash值会被去重
方法
增加
set.update(*others) others 可为多个值或另一个集合,但必须为可迭代对象
set.add(elem) add只接收一个参数
移除
set.remove(elem) 移除一个元素,若元素不存在,抛keyerror异常 使用hash算法找到值,效率极高
set.discard(elem) 从set中移除elem,若元素不存在,什么都不做
set.pop() 随机弹出一个值,空集返回keyerror异常
set和线性结构
线性结构的查询时间复杂度为O(n),随数据规模增大而耗时增加
set,dict等非线性结构,内部使用hash值作为key,时间复杂度可以做到O(1),查询时间和数据规模无关
可hash
数值型 int,float,complex
布尔型 True False
字符串 string,bytse
tuple
None
以上都是不可变类型,成为可哈希类型,hashable
集合的运算
并集 A|B
set.union(*others) 返回两个集合的并集,生成一个新的集合
支持 |=
交集 A&B
set.intersection(*others) 返回和多个集合的交集 ,生成一个新的集合
支持 &=
差集 A-B = A - A&B
set.difference(*others) 返回和多个集合的差集,生成集合
-等同于difference
difference_update(*others) 获取和多个集合的差集并就地修改
支持 -=
对称差集 A^B = (A - B) | (B -A)
set.symmetric_difference(other) 返回一个集合与另一个集合的差集,生成新集合
set.symmetric_difference_update(other) 获取和另一个集合的差集并就地修改
支持^=
子集,真子集,交集
<= 判断子集
< 判断真子集
set.isdisjoint(other) 判断有无交集,没有交集,返回True