一,set 集合
set 中的元素是不重复的,无序的,里面的元素必须是可哈希的(int,str,tuple,bool),但是set本身是不可哈希的,set是可变的.
可以这样来记:set 就是dict类型的数据,但是不保存value,只保存key,set也可以用{}表示
可以使用set来去掉重复
lst = [1,2,4,4,4,5,2,2,6,7,8,9] lst = list(set(lst)) print(lst) #[1, 2, 4, 5, 6, 7, 8, 9]
二,set集合的增删改查
1,增加
.add 添加,重复的内容不会被添加到set集合中
.update 迭代更新
s = {"吃饭","睡觉","打豆豆"} s.add("打累了") print(s) #{'吃饭', '打累了', '打豆豆', '睡觉'} s.update("神经病") print(s) #{'睡觉', '经', '吃饭', '打豆豆', '病', '打累了', '神'} s.update(["哈哈"]) print(s) #{'睡觉', '经', '吃饭', '打豆豆', '哈哈', '病', '打累了', '神'}
2,删除
.pop 随机删除一个,弹出一个
.remove 直接删除一个元素,如果不存在这个元素,会报错
.clear 清空 如果set集合是空的,打印出来的事set(),因为要跟dict区分
3,修改:
set集合中的数据没有索引,也没有办法定位一个元素,所以没办法直接进行修改,可以采用先删除后添加的方式来完成修改操作
#把刘嘉玲改为赵本山 s = {"刘嘉玲", '关之琳', "王祖贤","张曼玉", "李若彤"} s.remove("刘嘉玲") s.add("赵本山") print(s)
4,查询
set是一个可迭代对象,所以可以使用for循环
for el in s:
print(el)
5,常用操作
s1 = {"刘能", "赵四", "⽪长山"} s2 = {"刘科⻓", "冯乡长", "⽪长山"} # 交集 # 两个集合中的共有元素 print(s1 & s2) # {'皮长山'} print(s1.intersection(s2)) # {'皮长山'} #并集 print(s1 | s2) # {'刘科长', '冯乡长', '赵四', '⽪长山', '刘能'} print(s1.union(s2)) # {'刘科长', '冯乡长', '赵四', '⽪长山', '刘能'} # 差集 print(s1 - s2) # {'赵四', '刘能'} 得到第一个中单独存在的
print(s1.difference(s2)) # {'赵四', '刘能'}
二,深浅拷贝
浅拷贝:只拷贝第一层,第二层的内容不会拷贝,一个改变,另一个也会跟着改变
深拷贝:把所有的都拷贝,元素内部的元素也进行拷贝,不会产生一个改变,另一个也跟着改变的问题