集合及相关操作
一、什么是集合
- 是python语言提供的一种内置的数据结构
- 与列表,字典一样是可变类型的序列
- 集合是没有value的字典
二、集合的创建方式
1、直接{ }
2、使用内置函数set()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | '' ' 第一种创建方式——直接使用{} '' ' demo={ '秦健峰' , '梅达' ,98} print(demo) print(type(demo)) #创建空集合 demo_void={} print(demo_void,type(demo_void)) #{} < class 'dict' >可以看出,这是字典类型,也就是说建立集合时不能直接使用{} demo_empty= set () print(demo_empty,type(demo_empty))# set () < class 'set' > '' ' 第二种创建反式——使用 set ()函数 '' ' #使用range创建集合 demo2= set (range(0,6)) print(demo2) #使用列表创建集合 lst=list([3,4,5,2,3,3,3]) print(lst,type(lst)) demo3= set (lst) print(demo3,type(demo3)) #{2, 3, 4, 5} < class 'set' >可以看到集合中重复的元素被删除,集合中的元素不允许重复 #使用元组创建集合 test=(123, 'meida' ,98) print(test,type(test)) #(123, 'meida' , 98) < class 'tuple' > demo4= set (test) print(demo4,type(demo4))#{ 'meida' , 123, 98} < class 'set' >可以看出集合是无序的 #使用字符串创建集合 sty= 'python' print(sty,type(sty))#python < class 'str' > demo5= set (sty) print(demo5,type(demo5))#{ 'n' , 't' , 'p' , 'y' , 'o' , 'h' } < class 'set' > #使用集合创建集合 demo6= set ({124,64,25}) print(demo6,type(demo6))#{64, 25, 124} < class 'set' > |
三、集合的相关操作
1、集合元素的判断操作
- in
- not in
1 2 3 4 5 6 7 | '' ' 集合的判断操作 '' ' print(90 in demo) #False print(90 not in demo) #True print(98 in demo) #True print(98 not in demo) #False |
2、集合元素的新增操作
- 调用add()方法,一次添加一个元素
- 调用update()方法至少添加一个元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | '' ' 集合的新增操作 '' ' demo.add(500) print(demo,type(demo)) #{98, 499, 23, 500, 6, 455, 89} < class 'set' > #将集合添加到另一个集合中 demo.update({100,200,300}) print(demo)#{98, 100, 6, 455, 200, 300, 499, 500, 23, 89} #J将列表元素添加到另一个集合中 demo.update([900,88,6666,544]) print(demo)#{544, 98, 100, 900, 6, 455, 200, 6666, 300, 499, 500, 23, 88, 89} #将元组添加到集合中 demo.update((1,2,3,4,5,6)) print(demo)#{1, 2, 3, 900, 4, 6, 5, 6666, 23, 544, 300, 455, 200, 88, 89, 98, 100, 499, 500} demo.update(5) #TypeError: 'int' object is not iterable ///update()不能代入一个元素 |
3、集合元素的删除操作
- 调用remove()方法,一次删除一个指定元素,如果指定的元素不存在就抛出异常KeyError
- 调用discard()方法,一次删除一个指定元素,如果指定的元素不存在也不抛出异常
- 调用pop()方法,一次只删除一个任意元素,不可指定元素删除
- 调用clear()方法,清空集合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | '' ' 集合的删除操作 '' ' print( "集合元素的删除操作" ) print(demo) #remove方法 demo.remove(1) print(demo) #demo.remove(999999)#KeyError: 999999如果指定元素不存就会报错 #discard方法 demo.discard(2) print(demo) demo.discard(514151)#虽然指定元素不存在,但是也不会抛出异常 #pop方法 demo.pop() print(demo)#随机删除 #demo.pop(6)#TypeError: set.pop() takes no arguments (1 given)//pop不能指定参数 #clear方法 demo.clear() print(demo)# set () //空集合 |
四、集合间的关系
1、两个集合是否相等
1 2 3 4 5 6 7 8 | s1={10,20,30,40,50} s2={50,40,30,20,10} s3={1,2,3,4,5} print(s1==s2) #True print(s1!=s2) #False print(s1==s3) #False print(s1!=s3) #True |
2、一个集合是否是另一个集合的子集
1 2 3 4 5 6 | s1={10,20,30,40,50} s2={10,20,30,40} s3={10,20,60} print(s2.issubset(s1))#True print(s3.issubset(s1))#False |
3、一个集合是否是另一个集合的超集
1 2 3 4 5 6 | s1={10,20,30,40,50} s2={10,20,30,40} s3={10,20,60} print(s1.issuperset(s2))#True print(s1.issuperset(s3))#False |
4、两个集合是否没有交集
1 2 3 4 5 6 | s1={10,20,30,} s2={1,2,3} s3={10,20,60} print(s1.isdisjoint(s2))#True print(s1.isdisjoint(s3))#False |
五、集合的数学操作
- 交集
- 并集
- 差集
- 对称差集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | '' ' 交集操作 '' ' s1={10,20,30,40} s2={20,30,40,50,60} print(s1.intersection(s2)) print(s1 & s2) # & 与 intersection()方法等价——求交集操作 '' ' 并集操作 '' ' print(s1) print(s2) print(s1.union(s2)) print(s1 | s2) # | 与union()方法等价 '' ' 差集操作 '' ' print(s1.difference(s2)) print(s1 - s2) # - 与difference()方法等价 '' ' 对称差集 '' ' print(s1.symmetric_difference(s2)) print(s1 ^ s2)# ^ 与symmertric_difference()方法等价 |
六、集合生成式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | '' ' 列表生成式 '' ' lst=[i*i for i in range(6)] print(lst,type(lst)) '' ' 集合生成式 '' ' demo={i*i for i in range(6)} print(demo,type(demo)) 运算结果: [0, 1, 4, 9, 16, 25] < class 'list' > {0, 1, 4, 9, 16, 25} < class 'set' > |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)