集合是无序的,天生不重复的数据组合,它的作用如下:
- 去重,即:把一个列表变成集合,就去重了
- 关系测试,即:测试两组集合的交集、并集和差集等
一、集合常用方法总结
二、定义
1、语法
>>> name_1 = [1,2,3,4,7,8,7,10]#把列表转换为集合>>> name_1 = set(name_1)#转换后,去重>>> print(name_1,type(name_1)){1, 2, 3, 4, 7, 8, 10} <class 'set'>
三、关系测试
1、交集(intersection())
>>> name_1 = [1,2,3,4,7,8,7,10]>>> name_2 = [1,3,5,8,10]>>> name_1 = set(name_1)>>> name_2 = set(name_2)#输出结果>>> name_1.intersection(name_2){8, 1, 10, 3}
2、并集(union())
>>> name_1 = [1,2,3,4,7,8,7,10]>>> name_2 = [1,3,5,8,10]>>> name_1 = set(name_1)>>> name_2 = set(name_2)#输出结果>>> name_1.union(name_2){1, 2, 3, 4, 5, 7, 8, 10}
3、差集(difference())
>>> name_1 = [1,2,3,4,7,8,7,10]>>> name_2 = [1,3,5,8,10]>>> name_1 = set(name_1)>>> name_2 = set(name_2)#输出结果>>> name_1.difference(name_2){2, 4, 7}
特别提示:差集取的是数值在第一个集合中,但是不在第二个集合中(在我不在你)
4、issubset()
判断一个集合是否是另一个集合的子集
>>> name_1 = [1,2,3,4,7,8,7,10]>>> name_3 = [1,2,3,4]>>> name_1 = set(name_1)>>> name_3 = set(name_3)#输出结果>>> name_3.issubset(name_1)True
5、issuperset()
判断一个集合是否是另一个集合的父集
>>> name_1 = [1,2,3,4,7,8,7,10]>>> name_3 = [1,2,3,4]>>> name_1 = set(name_1)>>> name_3 = set(name_3)#输出结果>>> name_1.issuperset(name_3)True
6、对称差集(symmetric_difference())
把两个集合没有交集的数值取出来
>>> name_1 = [1,2,3,4,7,8,7,10]>>> name_2 = [1,3,5,8,10]>>> name_1 = set(name_1)>>> name_2 = set(name_2)#输出结果>>> name_1.symmetric_difference(name_2){2, 4, 5, 7}
7、isdisjoint()
判断两个集合是否有交集,没有交集,则返回True
>>> name_1 = [1,2,3,4,7,8,7,10]>>> name_2 = [1,3,5,8,10]>>> name_3 = [11]>>> name_1 = set(name_1)>>> name_2 = set(name_2)>>> name_3 = set(name_3)#有交集>>> name_1.isdisjoint(name_2)False#无交集>>> name_1.isdisjoint(name_3)True
四、关系测试(特殊符号)
1、交集(&)
>>> name_1 = [1,2,3,4,7,8,7,10]>>> name_2 = [1,3,5,8,10]>>> name_1 = set(name_1)>>> name_2 = set(name_2)#结果输出>>> name_1 & name_2{8, 1, 10, 3}
2、并集(|)
>>> name_1 = [1,2,3,4,7,8,7,10]>>> name_2 = [1,3,5,8,10]>>> name_1 = set(name_1)>>> name_2 = set(name_2)#结果输出>>> name_1 | name_2{1, 2, 3, 4, 5, 7, 8, 10}
3、差集(-)
>>> name_1 = [1,2,3,4,7,8,7,10]>>> name_2 = [1,3,5,8,10]>>> name_1 = set(name_1)>>> name_2 = set(name_2)#结果输出>>> name_1 - name_2{2, 4, 7}
4、对称差集(^)
>>> name_1 = [1,2,3,4,7,8,7,10]>>> name_2 = [1,3,5,8,10]>>> name_1 = set(name_1)>>> name_2 = set(name_2)#输出>>> name_1 ^ name_2{2, 4, 5, 7}
5、是否是子集(<=)
>>> name_1 = [1,2,3,4,7,8,10]>>> name_3 = [1,2,3,4]>>> name_1 = set(name_1)>>> name_3 = set(name_3)#输出>>> name_3 <= name_1True
6、是否是父集(>=)
>>> name_1 = [1,2,3,4,7,8,10]>>> name_3 = [1,2,3,4]>>> name_1 = set(name_1)>>> name_3 = set(name_3)#输出>>> name_1 >= name_3True
五、基本操作
1、添加(add())
>>> name_2 = [1,3,5,8,10]>>> name_2 = set(name_2)#添加已存在,不报错>>> name_2.add(1)>>> name_2{8, 1, 10, 3, 5}#添加不存在,添加一个新的数值>>> name_2.add(11)>>> name_2{1, 3, 5, 8, 10, 11}
2、添加多项(update())
>>> name_2 = [1,3,5,8,10]>>> name_2 = set(name_2)>>> name_2.update([12,13,14])#输出结果>>> name_2{1, 3, 5, 8, 10, 12, 13, 14}
3、删除(remove(),pop(),discard())
①remove()
>>> name_2 = [1,3,5,8,10]>>> name_2 = set(name_2)>>> name_2{8, 1, 10, 3, 5}>>> name_2.remove(1)#输出>>> name_2{8, 10, 3, 5}#删除不存在的元素,会报错>>> name_2.remove(1)Traceback (most recent call last): File "<input>", line 1, in <module>KeyError: 1
特别提示:用remove删除时,当元素不存在,会报错
②pop()
>>> name_2 = [1,3,5,8,10]>>> name_2 = set(name_2)>>> name_2{8, 1, 10, 3, 5}#输出>>> name_2.pop()8
特别提示:pop是随机删除集合中的某个元素,并且打印
③discard()
>>> name_2 = [1,3,5,8,10]>>> name_2 = set(name_2)>>> name_2.discard(10)#输出结果>>> name_2{8, 1, 3, 5}#删除不存在元素,不报错>>> name_2.discard(10)
特别提示:用discard删除不存在的元素,不会出现报错
4、长度(len())
>>> name_1 = [1,2,3,4,7,8,7,10]>>> name_1 = set(name_1)#结果输出>>> len(name_1)7
5、x in s
测试 x 是否是 s 的成员
>>> name_1 = [1,2,3,4,7,8,7,10]>>> name_1 = set(name_1)#结果输出>>> 1 in name_1True
6、x not in s
测试 x 是否不是 s 的成员
>>> name_1 = [1,2,3,4,7,8,7,10]>>> name_1 = set(name_1)#输出>>> 12 not in name_1True
更多关于Python集合操作方法可查看下面的相关链接