一、集合的定义
- 1、python语言提供的内置数据结构
- 2、与列表、字典一样都属于可变类型的序列
- 3、集合是没有value的字典
二、集合的创建方式
1、使用{}
s={2,3,4,5,5,6,7,7} #集合中的元素不允许重复,并且集合中的元素是无序的 print(s) #{2, 3, 4, 5, 6, 7}
2、使用set()
s1=set(range(6)) print(s1) #{0, 1, 2, 3, 4, 5} s2=set([1,2,2,3,4,5,5,6]) #将数列元素转变为集合元素 print(s2,type(s2)) #{1, 2, 3, 4, 5, 6} <class 'set'> s3=set((1,2,3,3,4,5,5,6)) #将元组元素转变为集合元素 print(s3,type(s3)) #{1, 2, 3, 4, 5, 6} <class 'set'> s4=set('python') print(s4,type(s4)) #{'o', 'y', 'n', 't', 'p', 'h'} <class 'set'> s5=set({1,2,44,52,32}) print(s5,type(s5)) #{32, 1, 2, 52, 44} <class 'set'>
3、定义一个空集合
s6={} #定义出来是字典,不是集合 print(s6,type(s6)) #{} <class 'dict'> 字典类型 #正确的定义空集合的方式 s7=set() print(s7,type(s7)) #set() <class 'set'>
三、集合的相关操作
1、集合元素的判断操作
- in 或 not in
s={10,20,30,40} print(10 in s) #True print(100 not in s) #True
2、集合元素的新增操作
- 调用add()方法,一次添加一个元素
- 调用update()方法,至少添加一个元素,集合是无序的
s.add(1) print(s) #{1, 40, 10, 20, 30} s.update({2,3}) #添加字典元素 print(s) #{1, 2, 3, 40, 10, 20, 30} s.update([6,7]) #添加列表元素 print(s) #{1, 2, 3, 6, 7, 40, 10, 20, 30} s.update((1000,2000)) #添加元组元素 print(s) #{1, 2, 3, 6, 7, 40, 1000, 10, 2000, 20, 30}
3、集合元素的删除操作
- 调用remove()方法,一次删除一个指定元素,如果指定的元素不存在抛出keyError
s.remove(1) print(s) #{2, 3, 6, 7, 40, 1000, 10, 2000, 20, 30} #s.remove(500) print(s) #KeyError: 500
- 调用discard()方法,一次删除一个指定元素,如果指定的元素不存在不抛出异常
s.discard(500) #不抛出异常 s.discard(1000) print(s) #{2, 3, 6, 7, 40, 10, 2000, 20, 30}
- 调用pop()方法,一次只删除任意一个元素,是不可以有参数的,如果有参数,则会抛出异常
s.pop() #随机把2删除了 print(s) #{3, 6, 7, 40, 10, 2000, 20, 30} #s.pop(100) #TypeError: pop() takes no arguments (1 given)
- 调用clear()方法,清空集合
s.clear() print(s) #set()
四、集合间的关系
1、两个集合是否相等
- 可以使用运算符 == 或 != 判断
s1={10,20,30,40} s2={20,30,40,10} print(s1==s2) #True print(s1!=s2) #False
2、一个集合是否是另一个集合的子集
- 可以调用方法issubset进行判断
- B是A的子集 B.issubset(A)
s1={10,20,30,40,50,60} s2={10,20,40} s3={10,20,90} print(s2.issubset(s1)) #True print(s3.issubset(s1)) #False
3、一个集合是否是另一个集合的超集
- 可以调用方法issuperset进行判断
- A是B的超集 A.issuperset(B)
print(s1.issuperset(s2)) #True print(s1.issuperset(s3)) #False
4、两个集合是否没有交集
- 可以调用方法isdisjoint进行判断
print(s2.isdisjoint(s3)) #False 有交集为False s4={60,70,80} print(s3.isdisjoint(s4)) #True 没有交集为True
五、集合的数学操作
1、交集操作
s1={10,20,30,40} s2={20,30,40,50,60} print(s1.intersection(s2)) #{40, 20, 30} print(s1 & s2) #{40, 20, 30} intersection()与&等价,交集操作
2、并集操作
print(s1.union(s2)) #{40, 10, 50, 20, 60, 30} print(s1 | s2) #{40, 10, 50, 20, 60, 30} union()与|等价,并集操作
3、差集操作
print(s1.difference(s2)) #{10} print(s1-s2) #{10} difference()与-等价,差集操作
4、对称差集
print(s1.symmetric_difference(s2)) #{50, 10, 60} print(s1^s2) #{50, 10, 60} symmetric_difference()与^等价,对称差集
六、集合生成式
将列表生成式的[]改为{}便是集合生成式
s={i*i for i in range(10)} print(s) #{0, 1, 64, 4, 36, 9, 16, 49, 81, 25} 集合是无序的