什么是set
set
集合,元素是无序(存放顺序与输出顺序不同)不重复(元素是唯一的)的 用于保存不允许重复的元素,也可以用于 快速去重
底层原理:集合是一个哈希表
哈希表:无序,不重复
创建
set1 = set() # 声明一个空集合
set2 = {1,2,5,7,9,10} # 声明一个非空集合
set0 = { } # 声明一个字典!不是空集合
访问
增删改查
-
增加的方法有
.add
.update()
.add()
向集合中添加一个元素.update()
向集合中添加一组可迭代对象
,类似list
的.extend()
set1 = {1,2,3} set2 = {0,4,5} set2.add(6) print(set2) set1.update(set2) print(set1) ============================== {0, 4, 5, 6} {0, 1, 2, 3, 4, 5, 6}
-
删除的方法有
.remogve()
.discard()
.pop()
.clear()
del()
-
.remove()
删除集合中指定的元素,若无此元素则抛出异常 -
.discard()
删除集合中指定的元素,若无此元素则不做任何动作 -
.pop()
随机删除集合中的一个元素,并返回这个元素 -
.clear()
清空集合 -
del()
清空集合并回收内存
set1 = {1,2,3,4,0,5} print(set1) set1.remove(0) print(set1) set1.discard(5) print(set1) s = str(set1.pop()) print(set1,'remove:'+s) set1.clear() print(set1) del(set1) print(set1) ============================ {0, 1, 2, 3, 4, 5} {1, 2, 3, 4, 5} {1, 2, 3, 4} {2, 3, 4} remove:1 set() NameError: name 'set1' is not defined
-
-
曲线救国的修改和查询
利用
set
和list
之间的强制类型转换,借助list
的方法实现修改和查询
其他方法
-
交并差集运算
-
交集
&
或使用.intersection()
方法set1 = {1,5,8,0,6} set2 = {1,7,9,0,5} print(set1 & set2) print(set1.intersection(set2)) ========================== {0, 1, 5} {0, 1, 5}
-
并集
|
或使用.union()
方法set1 = {1,5,8,0,6} set2 = {1,7,9,0,5} print(set1 | set2) print(set1.union(set2)) =========================== {0, 1, 5, 6, 7, 8, 9} {0, 1, 5, 6, 7, 8, 9}
-
差集
-
或使用.difference()
方法set1 = {1,5,8,0,6} set2 = {1,7,9,0,5} print(set1 - set2) print(set1.difference(set2)) print(set2 - set1) print(set2.difference(set1)) =========================== {8, 6} {8, 6} {9, 7} {9, 7}
-
对称差集
^
或使用.symmetric_difference()
方法set1 = {1,5,8,0,6} set2 = {1,7,9,0,5} print(set1 ^ set2) print(set1.symmetric_difference(set2)) =========================== {6, 7, 8, 9} {6, 7, 8, 9}
-
不支持的操作
- 不支持
.insert()
.pop()
.index()
del()
等函数中,与下标有关的操作
支持的符号
in
检查元素是否在集合中存在is
检查两个集合地址是否相同
不支持的符号
-
[ ]
集合不支持索引操作 -
[:]
集合不支持切片操作 -
+
集合不支持连接操作 -
*
集合不支持重复操作