DAY 013--set(增、删、改、查、关系)
set
1、集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成一个集合,就自动去重了
- 关系测试,测试两组数据之间的交集、差集和并集等关系
2、集合中的元素有三个特征:
- 1. 确定性(元素必须可hash)
- 2. 互异性(去重)
- 3. 无序性(集合中的元素没有先后之分),如集合{3,4,5}和集合{5,3,4}算作同一个集合
3、如何将列表转成集合?
- set(array)
se=[1,2,3,3,4,5] print(set(se)) print(type(set(se))) {1, 2, 3, 4, 5} <class 'set'>
一、增
1、set.add()
- 如果添加的值包含在元素中,则默认不添加
- 添加的值不一定为集合的最后一位,集合是无序的,顺序无意义
s={1,2,3} s.add(3) print(s) {1, 2, 3} s.add(4) print(s) {1, 2, 3, 4}
s.add("hello")
print(s)
{1, 2, 3, "hello"}
2、set.update(iterable/string/set)
- 把要传入的元素拆分,做为个体传入到集合中
注意:set.add是把传入的元素整体放入set中
se = {11, 22, 33} be = {22,44,55} se.update(be) # set类型 print(se) se.update([66, 77]) # iterable类型 print(se) se.update("hello")#string类型 print(se) {33, 22, 55, 11, 44} {33, 66, 22, 55, 11, 44, 77} {66, 11, 'o', 77, 22, 33, 'e', 44, 'h', 'l', 55}
二、删除
2.1、set.pop()
- 随机删除一个值,pop方法不能传入任何参数
se = {11, 22, 33} be = {22,44,55} se.pop("11") print(se) #输出结果 TypeError: pop() takes no arguments (1 given) se = {11, 22, 33} se.pop() print(se) #输出结果 {11, 22}
2.2、set.remove()
- 删除指定的内容,如果不存在会报错,KeyError
se = {11, 22, 33} se.remove(22) print(se) #输出结果 {33, 11} se.remove(40) print(se) #输出结果 KeyError: 40
2.3、set.discard()
- 删除指定的内容,如果不存在不会报错
se = {11, 22, 33} se.discard(22) print(se) #输出结果 {33, 11} se.discard(50) print(se) #输出结果 {33, 11}#未报错
2.4、set.clear()
- 清空,set这个集合还存在,只是内容为空而已
se = {11, 22, 33} se.clear() print(se) set()
2.5、del set
- 删除集合
se={1,2,3,4,5} del se print(se) NameError: name 'se' is not defined
三、集合运算
3.1、交集
集合的交集:set1和set2共有的元素
- set1.intersection(set2)
- set&set2
s1={1,2,3,4,5} s2={2,6,7,3,0} print(s1&s2)#方法一 print(s1.intersection(s2))#方法二 {2, 3} {2, 3}
3.2、差集
集合的差集:set1中有但是set2中没有的元素
- set1.difference(set2)
- set1-set2
s1={1,2,3,4,5} s2={2,6,7,3,0} print(s1-s2) print(s1.difference(s2)) {1, 4, 5} {1, 4, 5}
3.3、并集
集合的并集:set1和set2公有的元素
- set1.union(set2)
- set1 | set2
s1={1,2,3,4,5} s2={2,6,7,3,0} print(s1|s2) print(s1.union(s2)) {0, 1, 2, 3, 4, 5, 6, 7} {0, 1, 2, 3, 4, 5, 6, 7}
3.4、对称差集
对称差集:set1和set2的并集减去set1和set2的交集
- set1.symmetric_difference(set2)
- set1^set2
s1={1,2,3,4,5} s2={2,6,7,3,0} print(s1^s2) print(s1.symmetric_difference(s2)) {0, 1, 4, 5, 6, 7} {0, 1, 4, 5, 6, 7}
3.5、补充说明
- set1.difference_update(set2) v.s set1.difference(set2)
- set1.symmetic_different_update(set2) v.s set1.symmetic_different(set2)
说明:difference和symmetric_different会生成新一个结果,而different_update 和 symmetic_different_update会覆盖之前集合
s1={1,2,3,4,5} s2={2,6,7,3,0} s1.difference(s2) print(s1) #输出结果 {1, 2, 3, 4, 5} s1.difference_update(s2) print(s1) #输出结果 {1, 4, 5}
四、集合关系判断
4.1、判断是否是子集
- set1.issubset(set2):set1是否为set2的子集,返回值为True或False
s1={1,2} s2={1,2,3,4,5,6} print(s1.issubset(s2)) #输出结果 True
4.2、判断是否是超集
- set1.issuperset(set2):set1是否为set2的超集,返回值为True或False
s1={1,2} s2={1,2,3,4,5,6} print(s2.issuperset(s1)) True
4.3、判断是否相交
- set1.isdisjoint(set2):set1和set2如果有交集为False,没有交集为True
s1={1,2} s2={1,2,3,4,5,6} print(s1.isdisjoint(s2)) False
Mark on 2018.04.13