集合(set)是一个无序不重复元素的序列。
基本功能是进行成员关系测试和删除重复元素。
1、集合的作用
- 它可以把一个列表中重复的数据去掉,而不需要你再写判断
- 可以做关系测试,比如说有两个科目,一个数学,一个是化学,想找出来既学习了数学又学习了化学的同学,就可以用集合
2、集合的定义:
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
创建格式:

parame = {value01,value02,...}
或者
set(value)
实例:

>>> set_one = {1,2,3,4,5,6} >>> type(set_one) <type 'set'> >>> set_two = set([1,2,3,4]) >>> type(set_two) <type 'set'> >>> print set_one set([1, 2, 3, 4, 5, 6]) >>> print set_two set([1, 2, 3, 4]) >>>
3、集合的添加
添加集合有两种方式,一种是通过add方法添加,另外一种就是通过updata方法加入;
集合add方法:是把要传入的元素做为一个整个添加到集合中,例如:

>>> a = set("boy") >>> a set(['y', 'b', 'o']) >>> a.add("girl") >>> a set(['y', 'girl', 'b', 'o']) >>>
集合updata方法:是把要传入的元素拆分,做为个体传入到集合中,例如:

>>> a = set("boy") >>> a set(['y', 'b', 'o']) >>> a.update("girl") >>> a set(['b', 'g', 'i', 'l', 'o', 'r', 'y']) >>>
4、集合的删除
集合删除操作方法:
remove:删除元素,如果元素不存在会报错

>>> a set(['b', 'g', 'i', 'l', 'o', 'r', 'y']) >>> a.remove('y') >>> a set(['b', 'g', 'i', 'l', 'o', 'r']) >>>
集合删除操作方法:
pop:删除一个随机的元素,并返回删除的元素

>>> a = {1,2,3,4,5} >>> a set([1, 2, 3, 4, 5]) >>> a.pop() 1 >>> a set([2, 3, 4, 5]) >>>
集合删除操作方法:
discard:如果删除的元素存在,删除,不存在不做处理

>>> a = {1,2,3,4,5} >>> a set([1, 2, 3, 4, 5]) >>> a.discard(4) >>> a set([1, 2, 3, 5]) >>> a.discard(6) >>> a set([1, 2, 3, 5]) >>>
5、集合运算
取差集:在list中存在,在list2中没有的

>>> list = {1,2,3,4,5} >>> list2 = {4,5,3,6,7} >>> list-list2 set([1, 2]) >>>
取交集:就是取list1和list2中都有的

>>> list set([1, 2, 3, 4, 5]) >>> list2 set([3, 4, 5, 6, 7]) >>> list & list2 set([3, 4, 5]) >>>
取并集:也就是把list1和list2合并了,然后去除重复的

>>> list set([1, 2, 3, 4, 5]) >>> list2 set([3, 4, 5, 6, 7]) >>> list | list2 set([1, 2, 3, 4, 5, 6, 7]) >>>
通过intersection取交集

>>> list set([1, 2, 3, 4, 5]) >>> list2 set([3, 4, 5, 6, 7]) >>> list.intersection(list2) set([3, 4, 5]) >>>
通过union取并集

>>> list set([1, 2, 3, 4, 5]) >>> list2 set([3, 4, 5, 6, 7]) >>> list.union(list2) set([1, 2, 3, 4, 5, 6, 7]) >>>
通过difference取差集

>>> list set([1, 2, 3, 4, 5]) >>> list2 set([3, 4, 5, 6, 7]) >>> list.difference(list2) set([1, 2]) >>>
通过symmetric_difference取对称差集,即除去交集元素后的所有元素

1 a = ['1','2','3','4'] 2 b = ['3','4','5','6'] 3 a = set(a) 4 b = set(b) 5 res =a.symmetric_difference(b) 6 res1 = a^b 7 print(res,res1) 8 9 运行结果: 10 {'1', '5', '2', '6'} {'1', '5', '2', '6'}
6、方法的判断
>>> list1 = {1,2,3,4,5,6,9}
>>> list2 = {1,2,3,6,1}
>>> list3 = {1,2,3}
issubset:判断list3是否是list1的子集

>>> #判断list3是否是list1的子集 ... list3.issubset(list1) True >>>
issuperset:判断list1是否是list3的父集

>>> #判断list1是否是list3的父集 ... list1.issuperset(list2) True >>>
isdisjoint:判断list1和list3是否有交集,有交集返回false,没有交集返回true

>>> #判断list1和list3是否有交集 ... list1.isdisjoint(list2) False
symmetric_difference:对称差集,输出两个列表中都没有的值,也就是把两个集合中相同的去掉

>>> list1.symmetric_difference(list2)
set([4, 5, 9])