Python数据结构集合-set
集合的定义
集合 set,collection翻译为集合类型或容器,是一个大概念。
集合特性:
可变、无序、不重复、可迭代的元素的集合。
示例:

集合元素
1、set集合的元素要求必须是可hash的
2、目前所学过的不可hash的类型有:list、set、bytearray、dict
3、元素不可以索引,因为无序
4、set可使用for...in迭代
示例,如下几种写法都是错误的:
s5 = {'a',(1,2),bytearray(b'abc')}
s5 = {'a',(1,2),bytearray(b'abc'),(1,2,[3])}
s5 = {'a',(1,2),bytearray(b'abc'),(1,2,[3]),{1,2}}
s5 = {'a',(1,2),{'a':100,'b':200},bytearray(b'abc'),(1,2,[3]),{1,2}}
返回typeError,unhashable type: 'dict' 'list' 'bytearray' 'set'
set增加
add():增加一个元素到set中,如果元素存在则什么也不做,生成新的集合
update(*others):合并其他元素到set集合中,参数others必须是可迭代对象,就地修改

set删除
remove(elem):从set中移除一个元素,元素不存在则抛出异常,KeyError
discard(elem):从set中移除一个元素,元素不存在什么都不做,则不抛异常
pop() -->item:移除并返回任意元素,因为是无序,所有不像列表不指定则是从尾部弹出,空集返回KeyError异常
clear():移除集合,标记为丢弃和回收资源

set修改与查询
要么删除,要么加入新的元素,非线性结构无法索引,但是可遍历迭代所有的元素;
成员运算符in、not in,判断元素是否在set集合中,效率极高:

从上图得出,线性结构查询的时间复杂度为O(n),随着规模的增大,耗时越长;
set、dict等非线性结构,内部使用了hash算法,时间复杂度可以做到O(1),查询的时间和数据规模无关。
可哈希(hash)类型:
数值型:int、float、complex
布尔型:True、False
字符串:string、bytes
元组:tuple
None
以上都是不可变类型,称之为可哈希类型,不可hash类型有:list、set、dict、bytearray,set元素必须是可hash。
集合
集合概念:
全集:所有元素的集合。
子集:
一个集合A所有的元素都在另外一个集合B内,A是B的子集,B是A的超集;
A是B的子集,且A不等于B,A就是B的真子集,B是A的真超集。
并集:多个集合合并的结果
交集:多个集合的交汇的公共部分
差集:集合中除去和其他集合的公共部分
集合运算
并集:将两个集合元素合并在一起,组成一个新的集合,称之为A与B的并集
union(*other):返回和多个集合合并后的新的集合,运算符为 |
update(*other):和多个集合合并,就地修改,运算符为 |=
s1 = set(range(5)) s2 = set(range(3,7)) n = s1.union(s2) #等价于 n = s1 | s2 #{0, 1, 2, 3, 4, 5, 6}
s1 |= s2 s1.update(s2) s1 = s1 | s2 以上三个等价,都是就地修改.
交集:集合A和B,相交,两个集合公共的部分组成的集合
intersection(*other):返回和多个集合的交集,& 运算符表示,等同于intersection;
intersection_update(*other):获取多个集合的交集,并就地修改 &=

差集:集合A和B,由所有属于A且不属于B的元素组成的集合
difference(*other):返回和多个集合的差集,- 运算符表示
difference_update(*other):就地修改 -=

对称差集:
集合A和B,由所有不属于A和B的交集元素组成的集合,(A -B) U (B - A)
symmetric_difference(other):返回和另一个集合的对称差集 ^ 运算符表示
symmetric_difference_update(other): 就地修改 ^=

如上图示:对称差集则为阴影部分的面积

集合运算
issubset(other) <=:判断当前集合是否是另一个集合的子集
set1 < set2 :则判断s1是s2的真子集
issupersubset(other) >=:判断当前集合是否是other的超集
set1 > set2:判断set1是否是set2的真超集
isdisjoint(other):当前集合和另一个集合没有交集,没有交集,返回True.


习题地址:
https://www.cnblogs.com/alrenn/p/12620500.html

浙公网安备 33010602011771号