集合set
集合是一个无序的,不重复的数据组合,主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
1.创建集合
s = {1,2,3,4,5} #创建集合
ss = set('hello') #创建集合
e = set() #创建空集合
t = set([1,2,1,2,3,4,5,3]) #将列表变成集合,去重
r = set(range(5))
print('s:',s,type(s))
print('ss:',ss,type(ss))
print('e:',e,type(e))
print('t:',t,type(t))
print('r:',r,type(r))
运行结果:
s: {1, 2, 3, 4, 5} <class 'set'>
ss: {'h', 'l', 'o', 'e'} <class 'set'>
e: set() <class 'set'>
t: {1, 2, 3, 4, 5} <class 'set'>
r: {0, 1, 2, 3, 4} <class 'set'>
2.关系测试
s = {1,3,5,8,16,33}
t = {5,8,12,15,22,44}
#交集
print('交集:',s&t)
print('交集:',s.intersection(t))
#并集
print('并集:',s|t)
print('并集:',s.union(t))
#差集
print('并集:',s-t) #在s中,但不在t中
print('并集:',s.difference(t))
#子集
print('子集',s.issubset(t)) #判断s是不是t的子集
r = s & t
print('子集',r.issubset(t))
print('子集<=',r <= t)
#父集
r = s | t
print('父集',s.issuperset(t)) #判断s是不是t的父集
print('父集',r.issuperset(t))
print('父集>=',r >= t)
#并集-交集
print('并集-交集',s ^ t) #项在t或s中,但不会同时出现在二者中
print('并集-交集',s.symmetric_difference(t))
#无交集为真
print('无交集为真',s.isdisjoint(t)) #无交集为真
r = s - t
rr= t - s
print('无交集为真',r.isdisjoint(rr))
运行结果:
交集: {8, 5}
交集: {8, 5}
并集: {1, 33, 3, 5, 8, 12, 44, 15, 16, 22}
并集: {1, 33, 3, 5, 8, 12, 44, 15, 16, 22}
并集: {16, 1, 3, 33}
并集: {16, 1, 3, 33}
子集 False
子集 True
子集<= True
父集 False
父集 True
父集>= True
并集-交集 {1, 3, 12, 15, 16, 22, 33, 44}
并集-交集 {1, 3, 12, 15, 16, 22, 33, 44}
无交集为真 False
无交集为真 True
3.增删改查
s = set(range(5))
print(s)
if 2 in s: #判断元素是都存在
print('True')
s.add('s') #增加单项
print(s)
t = set('hello')
s.update(t) #添加多项
print(s)
s.remove('s') #删除s
print(s)
s.discard('h') #删除h
print(s)
s.pop() #随机删除
print(s)
运行结果:
{0, 1, 2, 3, 4}
True
{0, 1, 2, 3, 4, 's'}
{0, 1, 2, 3, 4, 'e', 'o', 'l', 'h', 's'}
{0, 1, 2, 3, 4, 'e', 'o', 'l', 'h'}
{0, 1, 2, 3, 4, 'e', 'o', 'l'}
{1, 2, 3, 4, 'e', 'o', 'l'}
4.浅复制copy
s = set(range(5))
t = s.copy()
s.remove(4)
print('s:',s)
print('t:',t)
运行结果:
s: {0, 1, 2, 3}
t: {0, 1, 2, 3, 4}