set集合,一个不允许重复重复 & 可变类型(元素可哈希)
无序,无法通过索引取值
可变,可以添加和删除元素
不允许数据重复
想要维护一大堆不重复的数据时,就可以用集合
注意:定义空集合时,只能使用
v = set()
,不能使用v={}
(这样是定义一个空字典)
一、独有
1.1 、 添加元素
data = {"刘嘉玲", '关之琳', "王祖贤"}
data.add("郑裕玲")
print(data)
{'王祖贤', '郑裕玲', '刘嘉玲', '关之琳'}
1.2 、删除元素
data = {"刘嘉玲", '关之琳', "王祖贤","张曼⽟", "李若彤"}
data.discard("关之琳")
print(data)
{'张曼⽟', '王祖贤', '李若彤', '刘嘉玲'}
1.3 、交集
s1 = {"刘能", "赵四", "⽪⻓⼭"}
s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"}
s4 = s1.intersection(s2) # 取两个集合的交集
print(s4) # {"⽪⻓⼭"}
s3 = s1 & s2 # 取两个集合的交集
print(s3)
1.4 、并集
s1 = {"刘能", "赵四", "⽪⻓⼭"}
s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"}
s4 = s1.union(s2) # 取两个集合的并集 {"刘能", "赵四", "⽪⻓⼭","刘科⻓", "冯乡⻓", }
print(s4)
s3 = s1 | s2 # 取两个集合的并集
print(s3)
1.5 、差集
s1 = {"刘能", "赵四", "⽪⻓⼭"}
s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"}
s4 = s1.difference(s2) # 差集,s1中有且s2中没有的值 {"刘能", "赵四"}
s6 = s2.difference(s1) # 差集,s2中有且s1中没有的值 {"刘科⻓", "冯乡⻓"}
s3 = s1 - s2 # 差集,s1中有且s2中没有的值
s5 = s2 - s1 # 差集,s2中有且s1中没有的值
print(s5,s6)
二、公共
2.1 、 减,计算差集
s1 = {"刘能", "赵四", "⽪⻓⼭"}
s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"}
s3 = s1 - s2
s4 = s2 - s1
print(s3)
print(s4)
{'刘能', '赵四'}
{'冯乡⻓', '刘科⻓'}
2.2 、&,计算交集
s1 = {"刘能", "赵四", "⽪⻓⼭"}
s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"}
s3 = s1 & s2
print(s3)
{'⽪⻓⼭'}
2.3 、|,计算并集
s1 = {"刘能", "赵四", "⽪⻓⼭"}
s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"}
s3 = s1 | s2
print(s3)
{'赵四', '刘科⻓', '冯乡⻓', '⽪⻓⼭', '刘能'}
2.4 、长度
v = {"刘能", "赵四", "尼古拉斯"}
data = len(v)
print(data)
3
2.5 、for循环
v = {"刘能", "赵四", "尼古拉斯"}
for item in v:
print(item)
刘能
尼古拉斯
赵四
2.6 、转换
其他类型如果想要转换为集合类型,可以通过set进行转换,并且如果数据有重复自动剔除
提示:int/list/tuple/dict都可以转换为集合
v1 = [11,22,33,11,3,99,22]
v2 = set(v1)
print(v2) # {11,22,33,3,99}
v1 = (11,22,3,11)
v2 = set(v1)
print(v2) # {11,22,3}
提示:这其实也是去重的一个手段
2.7 、集合得其他知识
2.7.1 存储原理:利用哈希函数将元素转换成一个数值,然后取余数,将元素放在哈希表对应得余数位置
2.7.2 元素必须可哈希:因存储原理,集合的元素必须是可哈希的值,即:内部通过通过哈希函数把值转换成一个数字。目前可哈希的数据类型:int、bool、str、tuple,而list、set是不可哈希的
总结:集合的元素只能是 int、bool、str、tuple
2.7.3 查找速度特别快:因存储原理特殊,集合的查找效率非常高(数据量大了才明显)
2.7.4 注意:由于True和False本质上存储的是 1 和 0 ,而集合又不允许重复,所以在整数 0、1和False、True出现在集合中会有如下现象:
v1 = {True, 1}
print(v1) # {True}
v2 = {1, True}
print(v2) # {1}
v3 = {0, False}
print(v3) # {0}
v4 = {False, 0}
print(v4) # {False}
2.8 、强插:None类型
Python的数据类型中有一个特殊的值None,意味着这个值啥都不是 或 表示空。 相当于其他语言中
null
作用一样,在一定程度上可以帮助我们去节省内存