python 在set里随机选一个元素_Python基础6/20篇:集合set及补充的基础数据类型知识点...

Python基础6/20篇:集合set及补充的基础数据类型知识点

来都来了,不关注一下吗??

    今天我们学习最后的一个基本数据类型——集合(set),除此之外呢还会补充一些基础数据类型知识点5dcbfa3142cbc60e1d07432a799696e8.png5dcbfa3142cbc60e1d07432a799696e8.png,冲鸭!

            f1c5d3925ce8e3040762aae0e16e50db.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)

输出结果

2b332bf206b76b64988c21615aadc4c7.png

e3e9790f4492b6b901c522193d6d28c9.png

请注意:输出结果是无序的,上面两种情况都有可能发生

    2)迭代添加    set.update()

set1 = {'sissi', 'alex', 'cici'}set1.update('女神')print(set1)

输出结果(无序)

aa01b14c0c312aaae3df2f3e31d318f8.png

e145af2247444279f18548497d870284.png

(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)

输出结果

106791b8fe9edb46d6f72fec6c39d04e.png

    3)清空   set.clear()

set1 = {'sissi', 'alex', 'cici','ooo'}set1.clear()print(set1)

输出结果

8353f3f099085feced5fd26aa094de4b.png

(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)

输出结果

7116d5c743de7aa0539bf1e31a1fe195.png

4

集合运算

    还有一些集合运算,但是不是很常用,我在这里就放进来,不过多展示了~~需要的时候随时看一下就行。

# 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

    下面再给大家补充三个基础数据类型知识奥。255c485b8d80c0da6ce15cce26daa502.png255c485b8d80c0da6ce15cce26daa502.png

1. 列表和字符串的互换

    首先看一个示例:

s = "abc"s1 = s.join("非常喜欢")  # 把abc插入到"非常喜欢"print(s1)

输出结果

39362a53c42868ba68b7b793d42d2201.png

那么当我想把列表[“sissi”, “alex”]变成字符串的时候,就可以用 s.join()

s = "_".join(["sissi", "alex"])print(s)

输出结果

a22252a7d425dda3419ba7f84a389192.png

    当我们想把字符串"Sissi_Alex"转成列表时,用s.split(),可以再回头去复习一下str的相关操作哈:

s = "Sissi_Alex"s = s.split("_")print(s)

输出结果

9591eaf9aeba4ad12bc43481caafa242.png

    其他基础类型元素的互换都比较常规,就是要转换的数据类型加括号就好,大家可以自己下来试一下,比如:

            tuple->list   :  list(tuple)

            list ->tuple  :  tuple(list)

2.列表不能循环删除

    比如我想把列表中的元素依次删除,如果这样写是得不到我们想要的结果的:

lst = ["天秤座", "处女座", "金牛座", "魔羯座", "射手座"]for i in lst:    lst.remove(i)print(lst)

输出结果

72f0cef5f9a9b195aa0ef4b3cd38813a.png

那么为什么呢??

e7e9868d6841fd11d6346921a255c5d4.png

    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)

输出结果

6d5a2e681a1d9a4439998e0f3f83b6da.png

同样的, 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)

结果会报错:

13e31dfe4326b612e1c188aba3137bc1.png

那怎么办呢? 同样的,把要删除的元素暂时先保存在一个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)

输出结果

ff870e28004be40e1b69dabbdc1f5130.png

大家要熟悉这些基础数据类型的操作哈!

e14fc9027f8e5fb61d69ca70db308c62.png

3. dict中的dic.fromkey()可以帮我们通过list来创建一个dict

dic = dict.fromkeys(["sissi", "alex"], ["北京火锅", "四川火锅"])print(dic)

输出结果

39bd9f92f3503218c1e137356582cb94.png

前面列表中的每一项都会作为key, 后面列表中的内容作为value,生成dict。

注意:

dic = dict.fromkeys(["sissi", "alex"], ["北京火锅", "四川火锅"])dic.get("sissi").append("重庆酸辣粉")print(dic)

输出结果

3682e39aae60175cbe06c09f32993c6b.png

是因为代码中只是改了sissi那个列表,但是由于sissi和alex用的是同一个列表. 所以前面那个改了,后面那个会跟着改。

    到现在为止,基础数据类型我们已经学习完毕了。另外送大家一个超级大福利afa51889b00a14b1dad549b605149b6f.pngafa51889b00a14b1dad549b605149b6f.png下一篇我会出一个基础数据类型汇总,总结一下我们的前六篇255c485b8d80c0da6ce15cce26daa502.png255c485b8d80c0da6ce15cce26daa502.png敬请关注哦!

541e0fcfdb5630d4586629a362117a5e.png

往期相关链接:

Python基础5/20篇:字典dict,可变数据类型与不可变数据类型

Python基础4/20篇:一系列关于list和tuple的操作

Python基础3/20篇:用户交互、if和while

记得关注喵~~

b424a2db771c0a19759466530da60805.png

留言板

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值