集set
约定 set 翻译为集合,collection翻译为集合类型,是一个大概念
可变,无序,不重复,
可迭代,不可索引
定义
s= {} #特例,定义字典
s={1,2}
s1 = set(1,2)
set的元素要求必须可以hash
hash(1),hash('a'),hash(1,'a') 散列
集合,字典,列表,bytearray不可hash
set不能加,乘
add 增加 不能add 列表,集合,add是元素存在,什么都不做
update(*others) #就地修改,合并集合,参数other必须是可迭代对象
remove 删除,能少用就少用 返回None,不存在就返回KeyError
discard 移除元素返回None,没有就什么都不做
pop() -->item 弹出任意元素,空集返回KeyError
clear() 移除所有元素
不能修改,不可索引,不能用索引号查询
遍历 可以迭代所有数据
in 集合效率快,用空间换时间,O(1)
lst1=list(range(100))
lst2=list(range(100000))
-1 in lst1,-1 in lst2
set1=set(range(100))
set1=set(range(100000))
-1 in set1,-1 in set2
线性结构的查询时间是O(n),随数据规模增大而增加耗时
set,dict等结构,内部使用hash值作为key,时间度杂度O(1),查询时间和数据规模无关
可变的数据结构不可hash,不可变的数据可以hash
可变的数据结构有列表,集合,字典,bytearray等
不可变的数据结构有字符串,元组,字节,数值型,布尔型,None等,可hash,hashzble
集合
基本概念
全集 所有元素的集合
子集subset和超集superset, 集合A所有元素都在另一个集合B内,A是B的子集,B是A的超集
真子集和真超集 A是B的子集,且A不等于B,A就是B的真子集,B是A的真超集
并集 多个集合的合并,A和B的元素合并到一起,组成的集合叫并集
合并union(*other) 返回多个集合合并后的新集合
运算符| 等同于union
update(*other)多个集合合并,就地修改,不返回值
|= 等同于update
交集,多个集合的公共部分,属于A且属于B的元素组成的集合
intersection(*others)
& 等同于intersection
intersection_update(*other)
&= 获取多个集合的并集,就地修改
差集 属于A且不属于B的元素组成的集合
difference(*others) 返回和多个集的差集
- 等同于difference
difference_update 获取和多个集的差集,就地修改
-= 等同于difference_update
对称差集 集合A和B,所有不属于A和B交集的元素组成的集合,记作(A-B)∪(B-A)
symmetric_difference 返回和另一个集合的差集
^ 等同于symmetric_difference
symmetric_difference_update 获取和另一个集合的差集,就地修改
^= 等同于symmetric_difference_update
集合运算
issubset(other) <= 判断当前集合是否为另一个集合的子集
set1 < set2 判断set1是否是set2的真子集
issuperset(other) 判断当前集合是否为另一个集合的超集
set1 > set2 判断set1是否是set2的真超集
isdisjoint(other) 当前集合和另一个集合没有交集,没有交集返回True,有返回False
列表解析式
n = [random.randint(1,20) for _ in range(10)] 随机产生10个0-20之间的整数
也可以嵌套
n=[[random.randint(1,10) for _ in range(10)]for _ in range(2)] 随机产生2组数,每组十个1-10之间的数