集合的定义
集合 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):和多个集合合并,就地修改,运算符为 |=