DAY02 - 数据类型: 集合

集合

定义: 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}

 

posted @ 2017-08-10 10:52  FlyInDance  阅读(197)  评论(0编辑  收藏  举报