python基础之集合
一、python中集合的定义
由不同元素的集合,集合是一组无序排列的可Hash值,可以作为字典的key特性,集合中的元素是不可变类型。***注意三点(1.不同元素的集合,2.无序排列,3.集合中的元素是不可变类型)
二、集合的创建
s = set()
s = {1,2,3,4,5}
*注:创建空集合时,只能用set(),如果用第二种方法s={},创建的实际上是一个空字典。
s = {}
print(type(s))
<class 'dict'>
三、集合的功能
- 基本功能
添加(add, update)
s={1,2,3,5,6}
s.add(4) # 只能更新一个值,加的值不能重复
print(s)
s.update('4','7') # 可更新多个值
print(s)
执行结果如下:
{1,2,3,4,5,6}
{1,2,3,5,6,'4','7'}
清空(clear)
s={1,2,3,5,6}
s.clear()
print(s)
执行结果如下:
set()
复制
s={1,2,3,5,6}
s1=s.copy()
print(s1)
执行结果如下:
s1={1,2,3,5,6}
删除(pop, remove, discard)
s={4,10,5,7,8,4,9,2,5,‘s’}
s.pop() # 因为集合是无序的,所以随机删除的
print(s)
执行结果如下:
s={4, 5, 7, 8, 9, 10, 's'}
s.remove(7) #删除指定元素3,元素不存在是报错
执行结果如下:
s={4,10,5,8,4,9,2,5,‘s’}
s.discard('hello') #元素不存在时不报错
- 特有功能
交集(intersection 或' &')
p_s=['lcg','lzq','czd','cyz']
l_s=['cyz','zwx','wxj','czd']
print(p_s.intersection(l_s)) #求交集
print(p_s & l_s)
执行结果如下:
{'cyz', 'czd'}
{'cyz', 'czd'}
并集(union 或 ' |')
p_s=['lcg','lzq','czd','cyz']
l_s=['cyz','zwx','wxj','czd']
print(p_s.union(l_s)) #求并集
print(p_s|l_s)
执行结果如下:
{'lzq', 'lcg', 'zwx', 'wxj', 'czd', 'cyz'}
{'lzq', 'lcg', 'zwx', 'wxj', 'czd', 'cyz'}
差集(difference 或 '-')
p_s=['lcg','lzq','czd','cyz']
l_s=['cyz','zwx','wxj','czd']
print('差集',p_s.difference(l_s)) # 求差集,p_s减去l_s
print('差集',p_s-l_s)
执行结果如下:
差集 {'lzq', 'lcg'}
差集 {'lzq', 'lcg'}
交叉补集(symmetric.difference 或 '^')
p_s=['lcg','lzq','czd','cyz']
l_s=['cyz','zwx','wxj','czd']
print(p_s.symmetric_difference(l_s)) #交叉补集
print('交叉补集',p_s^l_s) #两个集合合到一起减去他们的交集
执行结果如下:
{'zwx', 'wxj', 'lzq', 'lcg'}
交叉补集 {'zwx', 'wxj', 'lzq', 'lcg'}
判断是否为有效集(isdisjoint)
s.isdisjoint:有交集为False,无交集为True (其中s为集合)
子集和父集(issubset 和 issuperset)
s1.issubset(s2):s2是s1的子集
s2.issuperset(s1): s2是s1的父集