集合及相关操作
一、什么是集合
- 是python语言提供的一种内置的数据结构
- 与列表,字典一样是可变类型的序列
- 集合是没有value的字典
二、集合的创建方式
1、直接{ }
2、使用内置函数set()
''' 第一种创建方式——直接使用{} ''' 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
''' 集合的判断操作 ''' 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()方法至少添加一个元素
''' 集合的新增操作 ''' 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()方法,清空集合
''' 集合的删除操作 ''' 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、两个集合是否相等
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、一个集合是否是另一个集合的子集
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、一个集合是否是另一个集合的超集
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、两个集合是否没有交集
s1={10,20,30,} s2={1,2,3} s3={10,20,60} print(s1.isdisjoint(s2))#True print(s1.isdisjoint(s3))#False
五、集合的数学操作
- 交集
- 并集
- 差集
- 对称差集
''' 交集操作 ''' 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()方法等价
六、集合生成式
''' 列表生成式 ''' 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'>