Python全栈day14(集合)
一,集合
1,集合由不同元素组成
2,无序
3,集合中元素必须是不可变类型
二,定义集合
1,s = {1,2,3,4,5}
2,s = set(hello)以迭代的方式生成集合
1 2 3 4 | s = set ( "hello" ) print (s) { 'o' , 'e' , 'h' , 'l' } |
三,集合的方法
1,add添加,如果添加有重复不会报错但是也不会添加
1 2 3 4 5 | s = { 1 , 2 , 3 } s.add( 4 ) print (s) { 1 , 2 , 3 , 4 } |
2,clear清除
3,copy拷贝
1 2 3 4 5 | s = { 1 , 2 , 3 } s1 = s.copy() print (s) { 1 , 2 , 3 } |
4,pop删除,因为是无序的所以是随机删除
5,remove指定删除,如果指定参数没有则报错不存在KeyError
1 2 3 4 5 | s = { 1 , 2 , 3 } s.remove( 1 ) print (s) { 2 , 3 } |
6,discard和remove功能一样不过是假如没有找到关键字不会报错
四,集合的运算
1,并集
假设有两个列表一个列表列出学习python的学生一个列出学习linux的学生请列出既学习了python的又学习了linux的学生
通过循环的方法vim day14-2.py
1 2 3 4 5 6 7 | python_l = [ 'zhangsan' , 'lisi' , 'wangwu' ] linux_l = [ 'zhangsan' , 'lisi' ] python_and_linux_l = [] for p_name in python_l: if p_name in linux_l: python_and_linux_l.append(p_name) print (python_and_linux_l)<br><br>[ 'zhangsan' , 'lisi' ] |
这种方法比较low下面用集合来处理 vim day14-3.py
1 2 3 4 5 6 | python_l = [ 'zhangsan' , 'lisi' , 'wangwu' ] linux_l = [ 'zhangsan' , 'lisi' ] #把列表转换成无序的集合 p_s = set (python_l) l_s = set (linux_l) print (p_s.intersection(l_s))<br><br> print (p_s&l_s) |
使用print(p_s&l_s)更加简单
2,和集
使用union或者符号
3,差集
直接使用-号即可,存在于键鼠不存在于被减数中的元素
p_s - l_s
4,交叉补集symmetric_difference 符号^ 先合集在减去并集就是交叉补集
1 2 3 4 5 6 | python_l = [ 'zhangsan' , 'lisi' , 'wangwu' ] linux_l = [ 'zhangsan' , 'lisi' , 'dage' ] #把列表转换成无序的集合 p_s = set (python_l) l_s = set (linux_l) print (p_s.symmetric_difference(l_s)) |
5,difference_update求完差集并更新原集合返回值为None 以下操作相当于p_s = p_s - l_s
1 2 3 4 5 6 7 | python_l = [ 'zhangsan' , 'lisi' , 'wangwu' ] linux_l = [ 'zhangsan' , 'lisi' ] #把列表转换成无序的集合 p_s = set (python_l) l_s = set (linux_l) v = p_s.difference_update(l_s) print (p_s,v)<br><br>{ 'wangwu' } None |
6,isdisjoint 两个集合没有交集返回True有交集返回False
1 2 3 4 5 | s1 = { 1 , 2 } s2 = { 3 , 4 } print (s1.isdisjoint(s2)) True |
7,issubset一个集合是否是另外一个集合的子集 如果是返回True如果不是返回False
1 2 3 4 5 | s1 = { 1 , 2 } s2 = { 1 , 2 , 3 , 4 } print (s1.issubset(s2)) True |
8,issuperset判断一个集合是否是另外一个集合的父集
9,update并集并且更新和union不同的是union不会更新
1 2 3 4 5 6 | s1 = { 1 , 2 } s2 = { 1 , 2 , 3 } s1.update(s2) print (s1) { 1 , 2 , 3 } |
五,集合的补充
1,frozenset定义不可变集合
1 2 3 4 | s = frozenset ( 'hello' ) print (s) frozenset ({ 'e' , 'h' , 'l' , 'o' }) |
2,列表使用集合的方法去重,但是新生成的列表顺序可能和原列表不同
1 2 3 4 5 | names = [ 'zhangsan' , 'zhangsan' , 'lisi' ] names = list ( set (names)) print (names) [ 'lisi' , 'zhangsan' ] |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!