Python基础6/20篇:集合set及补充的基础数据类型知识点
来都来了,不关注一下吗??
今天我们学习最后的一个基本数据类型——集合(set),除此之外呢还会补充一些基础数据类型知识点,冲鸭!
![f1c5d3925ce8e3040762aae0e16e50db.png](https://i-blog.csdnimg.cn/blog_migrate/4177013d09df21ceecc5e19ece64c8a3.png)
(七)集合 set
1基本概念
set集合用{}表示,是一个可变的数据类型. 但是里面的元素必须是不可变的数据类型/可hash的(int, str, tuple,bool)。我们可以这样来记,set就是dict类型的数据,但是不保存value,只保存key。它的特点是无序,不重复,日常工作中我们经常用它来去重。
2相关操作
(1)增
1)整体添加 set.add()
set2 = {"sissi", "cici", "alex"}set2.add("女神")print(set2)
输出结果
请注意:输出结果是无序的,上面两种情况都有可能发生
2)迭代添加 set.update()
set1 = {'sissi', 'alex', 'cici'}set1.update('女神')print(set1)
输出结果(无序)
(2)删
1)随机删除 set.pop()
set1 = {'sissi', 'alex', 'cici','ooo'}set1.pop() # 随机删除,有返回值print(set1)
2)按元素删除 set.remove()
set1 = {'sissi', 'alex', 'cici','ooo'}set1.remove('sissi')print(set1)
输出结果
3)清空 set.clear()
set1 = {'sissi', 'alex', 'cici','ooo'}set1.clear()print(set1)
输出结果
(3)改
set集合中的数据没有索引,所以没办法去定位一个元素,不能直接修改。但是我们可以采用先删除后添加的方式来完成修改操作,具体看前两步。
(4)查
由于没有索引/键值对,不能直接查,但set是一个可迭代对象. 所以可以进行for循环。
3去重
把当前数据类型转成set再转回去,示例:
lst = [1,2,3,4,5,6,7,5,6,7]set1 = set(lst) # list转setprint(set1)lst = list(set1) # set转listprint(lst)
输出结果
集合运算
还有一些集合运算,但是不是很常用,我在这里就放进来,不过多展示了~~需要的时候随时看一下就行。
# sample 1s1 = {"刘", "赵", "皮"}s2 = {"科", "冯", "皮"}# 交集# 两个集合中的共有元素print(s1 & s2) # {'皮'}print(s1.intersection(s2)) # {'皮'}# 并集print(s1 | s2) # {'刘', '冯', '赵', '皮', '科'}print(s1.union(s2)) # {'刘', '冯', '赵', '皮', '科'}# 差集print(s1 - s2) # {'赵', '刘'} 得到第一个中单独存在的print(s1.difference(s2)) # {'赵', '刘'}# 反交集print(s1 ^ s2) # 两个集合中单独存在的数据 {'刘', '冯', '赵', '科'}print(s1.symmetric_difference(s2)) # {'刘', '冯', '赵', '科'}# sample 2s1 = {"刘", "赵"}s2 = {"刘", "赵", "皮"}# 子集print(s1 # set1是set2的子集吗? Trueprint(s1.issubset(s2))# 超集print(s1 > s2) # set1是
![a1372285cfdc703ecb855e1010d44815.png](https://i-blog.csdnimg.cn/blog_migrate/16d391fd222ae1e84621e3a124402470.png)
下面再给大家补充三个基础数据类型知识奥。
1. 列表和字符串的互换
首先看一个示例:
s = "abc"s1 = s.join("非常喜欢") # 把abc插入到"非常喜欢"print(s1)
输出结果
那么当我想把列表[“sissi”, “alex”]变成字符串的时候,就可以用 s.join()
s = "_".join(["sissi", "alex"])print(s)
输出结果
当我们想把字符串"Sissi_Alex"转成列表时,用s.split(),可以再回头去复习一下str的相关操作哈:
s = "Sissi_Alex"s = s.split("_")print(s)
输出结果
其他基础类型元素的互换都比较常规,就是要转换的数据类型加括号就好,大家可以自己下来试一下,比如:
tuple->list : list(tuple)
list ->tuple : tuple(list)
2.列表不能循环删除
比如我想把列表中的元素依次删除,如果这样写是得不到我们想要的结果的:
lst = ["天秤座", "处女座", "金牛座", "魔羯座", "射手座"]for i in lst: lst.remove(i)print(lst)
输出结果
那么为什么呢??
for的运行过程,会有一个指针来记录当前循环的元素是哪一个,一开始这个指针指向第0个,然后获取到第0个元素,紧接着删除第0个。这个时候原来是第一个的元素会自动的变成第0个,然后指针向后移动⼀次,指向第1个元素,这时原来的1已经变成了0,也就不会被删除了。
拿我们这个例子来说,循环第一次,删除index为0的元素,列表变为lst= ["处女座", "金牛座","魔羯座", "射手座"],但是index随之也变为了1,所以循环第二次的时候会剔除”金牛座”而不会剔除处女座。
所以总结来说:list在循环的时候不能删,因为会改变索引,那么怎么删比较安全呢?那就是——把要删除的东西记录下来,循环要删除的东西:
del_lst = [] # 创建一个要删除的列表lst = ["天秤座", "处女座", "金牛座", "魔羯座", "射手座"]for i in lst: del_lst.append(i) # 记录要删除的元素,添加进del_lstfor i in del_lst: # 循环del_lst里面的元素 lst.remove(i) # 删除对应在lst里面的元素print(lst)
输出结果
同样的, dict中的元素在迭代过程中是不允许进行删除的,比如:
dic = {'k1': 'alex', 'k2': 'wusir', 's1': 'sissi'}# 删除key中带有'k'的元素for k in dic: if 'k' in k: del dic[k] # dictionary changed size during iteration,print(dic)
结果会报错:
那怎么办呢? 同样的,把要删除的元素暂时先保存在一个list中, 然后循环list,再删除:
dic = {'k1': 'alex', 'k2': 'wusir', 's1': 'sissi'}# 删除key中带有'k'的元素del_dic = {}for k,v in dic.items(): if 'k' in k: del_dic[k] = vfor k in del_dic.keys(): del dic[k]print(dic)
输出结果
大家要熟悉这些基础数据类型的操作哈!
3. dict中的dic.fromkey()可以帮我们通过list来创建一个dict
dic = dict.fromkeys(["sissi", "alex"], ["北京火锅", "四川火锅"])print(dic)
输出结果
前面列表中的每一项都会作为key, 后面列表中的内容作为value,生成dict。
注意:
dic = dict.fromkeys(["sissi", "alex"], ["北京火锅", "四川火锅"])dic.get("sissi").append("重庆酸辣粉")print(dic)
输出结果
是因为代码中只是改了sissi那个列表,但是由于sissi和alex用的是同一个列表. 所以前面那个改了,后面那个会跟着改。
到现在为止,基础数据类型我们已经学习完毕了。另外送大家一个超级大福利下一篇我会出一个基础数据类型汇总,总结一下我们的前六篇
敬请关注哦!
往期相关链接:
Python基础5/20篇:字典dict,可变数据类型与不可变数据类型
Python基础4/20篇:一系列关于list和tuple的操作
Python基础3/20篇:用户交互、if和while
记得关注喵~~
留言板