集合
定义: S=set(). 注意S={}为字典类型
求两个列表的公共部分
1 pythons=['AAA','BBB','CCC','DDD','EEE','FFF'] 2 linuxs=['DDD','GGG','EEE'] 3 res=[] 4 for p in pythons: 5 if p in linuxs: 6 res.append(p) 7 print(res)
>>> ['DDD','EEE']
1 集合内可以有多个元素,但是每个元素都必须是不可变类型,即可hash类型
2 集合内的元素唯一
3 集合是无序的
s={1,'a',1,1,1,1,1,1}
#本质 s=set({1,'a',1,1,1,1,1,1})
1 s1=set('hello') 2 print(s1,type(s1))
>>> {'l', 'h', 'e', 'o'} <class 'set'>
集合优先掌握的方法
1 pythons={'AAA','BBB','CCC','DDD','EEE','FFF'} 2 print('AAA' not in pythons)
>>> False 3 print(pythons) #集合是无序的
>>> {'EEE', 'CCC', 'BBB', 'FFF', 'DDD', 'AAA'}
集合的关系运算
s1={1,10,11,22}
s2={1,11,33}
交集
1 print(s1 & s2)
>>> {1,11}
并集
1 print(s1 | s2)
>>> {1, 33, 10, 11, 22}
差集
1 print(s1 - s2)
>>> {10,22} 2 print(s2 - s1)
>>> {33}
对称差集
1 print(s1 ^ s2)
>>> {33,22,10}
集合的父集与子集
父集
1 s1={1,2,3,5} 2 s2={1,5} 3 print(s1 >= s2)
>>> True
子集
1 s1={1,2,3,5} 2 s2={1,5} 3 print(s1 <= s2)
>>> False 4 print(s2 <= s1)
>>> True
集合的内置方法
pythons={'AAA','BBB','CCC','DDD','EEE','FFF'}
linuxs={'DDD','GGG','EEE'}
1. 求出即报名python又报名linux课程的学员名字集合
1 print(pythons & linuxs) 2 print(pythons.intersection(linuxs))
>>> {'EEE', 'DDD'}
2. 求出所有报名的学生名字集合
1 print(pythons | linuxs) 2 print(pythons.union(linuxs))
>>> {'EEE', 'CCC', 'BBB', 'GGG', 'FFF', 'DDD', 'AAA'}
3. 求出只报名python课程的学员名字
1 print(pythons - linuxs) 2 print(pythons.difference(linuxs))
>>> {'AAA', 'CCC', 'FFF', 'BBB'}
4. 求出没有同时这两门课程的学员名字集合
1 print(pythons ^ linuxs) 2 print(pythons.symmetric_difference(linuxs))
>>> {'CCC', 'BBB', 'GGG', 'FFF', 'AAA'}
集合的其他内置方法
1 s={1,2,3,'a'} 2 s.add(5) 3 print(s) #集合是无序的
>>> {1, 2, 3, 5, 'a'}
4 print(s.pop()) #集合是无序的
>>> 1 5 s.remove('a') #根据元素删除 6 print(s)
>>> {2, 3, 5} 7 s.remove('vvvvvvvvvv') #元素不存在报错KeyError 8 s.discard('aaaaaa') #元素不存在不报错 9 print(s)
>>> {2, 3, 5}