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

浙公网安备 33010602011771号