Python Set
1.基础
1.1 概念
集合,简称集。由任意个元素构成的集体。高级语言都实现了这个非常重要的数据结构模型类型。Python中,它是 可变的、无序的、不重复的元素的集合。
1.2 初始化
set()-> new empty set object
set(iterable) -> new set object
1 | s1 = set() |
1.3 元素性质
去重: 在集合中,所有元素必须想异
无需:因为无需,所以 不可索引
可哈希:Python集合中的元素必须可以hash,即元素都可以使用内建函数hash(不可hash类型: list、set、bytearray)
1.4 增删
add(elem)
- 增加一个元素到set中,如果元素存在,则不写入(去重)
update(*others) - 合并其他元素到set中,参数others必须为
可迭代对象
就地修改
1 | s = set() |
remove(elem)
- 从set中移除一个元素
- 元素不存在,抛出KeyError非ValueError
discard(elem)
- 从set中移除一个元素
- 元素不存在,不抛出异常
clear()
- 移除所有元素(将set引用计数清零)
1.5 检索时间复杂度
list与set都可以实现检索,那么谁的速度更快,时间复杂度如何?
list是一个线性数据结构,搜索元素的时间复杂度是O(n),随着时间规模增加耗时增大
示例对比检索速度
1 | import timeit |
执行后,耗时:0.7413969000335783
1 | import timeit |
执行后,耗时:8.09994526207447e-06
通过上面的实例,可以看出set的耗时小的多,这是因为set是一个非线性数据结构,set使用hash表实现,内部使用hash值作为key,时间复杂度为O(1),查询时间和数据规模无关,并不会随着数据规模增大而降低搜索性能
2.集合运算
2.1 并集
1 | a = {1,2,3} |
1 | a = {1,2,3} |
注: 为空集时,python表达为 set()
1 | a = {1,2,3} |
集合A与B,由所有不属于A和B交集元素组成(A-B)U(B-A)
1 | a = {1,2,3} |
1 | a = {1,2,3} |
3.练习
1.共同好友
- 你的好友A、B、C,他的好友C、B、D,求共同好友
1 | friend1 = {'A', 'B', 'C'} |
2.权限判断
- 有一个API,:要求权限同时具备A、B、C才能访问,用户权限是B、C、D,判断用户是否能够访问该API
1 | api = {'A', 'B', 'C'} |
- 有一个API,要求权限具备A、B、C任意一项就可访问,用户权限是B、C、D,判断用户是否0能够访问该API
1 | api = {'A', 'B', 'C'} |
3.一个总任务列表,存储所有任务。一个已完成的任务列表。找出为未完成的任务
1 | ALL = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} |
5.随机产生2组各10个数字的列表,如下要求:.
- 每个数字取值范围[10,20]
- 统计20个数字中,一共有多少个不同的数字?0
- 2组之间进行比较,不重复的数字有几个?分别是什么
- 2组之间进行比较,重复的数字有几个?跟别是什么
1 | import random |
评论


