python-集合
分类:
IT文章
•
2022-07-14 10:59:53
一、集合
定义:由不同元素组成的集合(set),是一个无序不重复元素的序列的可hash值,可以作为字典的key
基本功能是进行成员关系测试和删除重复元素。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
实例:
>>>x = set('runoob')
>>> y = set('google')
>>> x, y
(set(['b', 'r', 'u', 'o', 'n']), set(['e', 'o', 'g', 'l'])) # 重复的被删除
>>> x & y # 交集
set(['o'])
>>> x | y # 并集
set(['b', 'e', 'g', 'l', 'o', 'n', 'r', 'u'])
>>> x - y # 差集
set(['r', 'b', 'u', 'n'])
>>>
1、交集,二者的共同部分(求即报名python又报名linux的学生)
pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'}
s=pythons & linuxs
print(s)
结果:
{'gangdan', 'wupeiqi'}
View Code
intersection
描述:交集运算,原集合不更新
参数:set 要对比的集合
返回值:得到一个交集
pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'}
print(pythons.intersection(linuxs))
print(linuxs.intersection(pythons))
print(pythons)#原集合不更新
print(linuxs)#原集合不更新
#输出结果
{'wupeiqi', 'gangdan'}
{'wupeiqi', 'gangdan'}
{'alex', 'yuanhao', 'biubiu', 'gangdan', 'wupeiqi', 'egon'}
{'oldboy', 'wupeiqi', 'gangdan'}
2、并集:两集合所有不重复元素的集合
# 并集:老男孩所有报名的学生名字集合
pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'}
s=pythons | linuxs
print(s)
结果:
{'yuanhao', 'egon', 'biubiu', 'gangdan', 'wupeiqi', 'alex', 'oldboy'}
View Code
union:
描述:并集运算,原集合不更新
参数:set 要对比的集合
返回值:得到一个新的集合,两个集合中都有的元素都合并成一个
pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'}
print(pythons.union(linuxs))
#输出结果同上
{'oldboy', 'egon', 'alex', 'yuanhao', 'wupeiqi', 'gangdan', 'biubiu'}
3、差集:查询所有不存在于B集合的A集合元素(求只报名python,没有报名linux的学生)
pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'}
print(pythons - linuxs)
结果:
{'alex', 'egon', 'yuanhao', 'biubiu'}
View Code
difference
描述:差集运算,原集合不更新
参数:set 要对比的集合
返回值:得到一个差集
pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'}
print(pythons - linuxs)
print(pythons.difference(linuxs))#等同于pythons - linuxs
print(linuxs - pythons)#只报名linux,未报名pythons
print(linuxs.difference(pythons))
#输出结果
{'egon', 'yuanhao', 'biubiu', 'alex'}
{'egon', 'yuanhao', 'biubiu', 'alex'}
{'oldboy'}
{'oldboy'}
4.对称差集:与交集相反,排除重复元素的集合(没有同时报名python和linux课程的学生名字集合)
pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'}
print(pythons ^ linuxs)
结果:
{'alex', 'biubiu', 'egon', 'yuanhao', 'oldboy'}
View Code
symmetric_difference()
描述:对称差集运算,原集合不更新
参数:set 要对比的集合
返回值:返回一个对称差集
s1 = {'william','lisa','knight','pudding'}
s2 = {'william','pudding','xxxxxx'}
s3 = s1.symmetric_difference(s2)
print(type(s3),s3) # 得到一个对称差集
print(type(s1),s1) # 对称差集运算,原集合不更新
输出结果:
<class 'set'> {'knight', 'lisa', 'xxxxxx'}
<class 'set'> {'knight', 'william', 'lisa', 'pudding'}
5.父集、子集:>,>= ,<,<=
set1={1,2,3,4,5}
set2={1,2,3,4}
print(set1 >= set2)#set1是set2的父集,set1包含于set1
print(set1 > set2)#
结果:
True
True
View Code
issubset
描述:判断原集合是否是要对比的集合的子集,如果是则返回True,否则返回False
参数:set 要对比的集合
返回值:得到一个布尔值
issuperset
描述:判断原集合是否是要对比的集合的父集,如果是则返回True,否则返回False
参数:set 要对比的集合
返回值:得到一个布尔值
set1={1,2,3,4,5}
set2={1,2,3,4}
print(set1.issuperset(set2))#判断Set1是否是set2的父集
print(set1.issubset(set2))#判断Set1是否是set2的子集
6.update
描述:扩展集合
参数:要添加的集合
返回值:None(原集合会被修改)
s1={'apple','voivo','oppo','huwei'}
s2={'hshshs'}
s3=s1.update(s2) # 扩展集合s1
print(type(s3),s3)# 查看返回值
print(type(s1),s1)# 打印扩展后的集合s1
输出结果
<class 'NoneType'> None
<class 'set'> {'knight', 'sky', 'pudding', 'lisa', 'william'}
7、copy()
描述:复制集合
参数:无
返回值:返回一个和原集合一样的新的集合
s1 = {'william','lisa','knight','pudding'}
s2 = s1.copy() # 对集合s1进行复制
print(type(s1),s1)
print(type(s2),s2)
#输出结果
<class 'set'> {'knight', 'pudding', 'william', 'lisa'}
<class 'set'> {'knight', 'pudding', 'william', 'lisa'}
8、pop()
描述:随机删除集合中的一个元素
参数:无
返回值:返回被删除的元素
s1 = {'william','lisa','knight','pudding'}
s2 = s1.pop() # 随机删除集合中的一个元素不用指定参数,随机删除,并且会有返回值
print(type(s1),s1) print(type(s2),s2) #输出结果 <class 'set'> {'lisa', 'knight', 'william'} <class 'str'> pudding
9、clear()
描述:清空字典
参数:无
返回值:None(原集合会被修改)
s1 = {'william','lisa','knight','pudding'}
s2 = s1.clear() # 清空集合
print(type(s1),s1)
print(type(s2),s2)
<class 'set'> set()
<class 'NoneType'> None
10、remove()
描述:删除集合中指定的元素
参数:element 元素
返回值:None(原集合会被修改)
s1 = {'william','lisa','knight','pudding'}
s2 = s1.remove('lisa')#指定元素删除,元素不存在则报错,单纯的删除,没有返回值
print(type(s1),s1)
print(type(s2),s2) # 返回值为空
#输出结果
<class 'set'> {'william', 'pudding', 'knight'}
<class 'NoneType'> None
11、add()
描述:为集合增加元素
参数:element 元素
返回值:None(原集合会被修改)
linuxs={'wupeiqi','oldboy','gangdan'}
linuxs.add('asb') #set类型的集合是可变类型
linuxs.add([1,2,3]) #报错,只能添加不可变类型
print(linuxs)
#输出结果(两次)
{'asb', 'oldboy', 'wupeiqi', 'gangdan'}
linuxs.add([1,2,3]) #报错,只能添加不可变类型
TypeError: unhashable type: 'list'
12.difference_update
述:差集运算,原集合更新
参数:set 要对比的集合
返回值:None(原集合会被修改)
s1 = {'william','lisa','knight','pudding'}
s2 = {'sky','william','hello','knight'}
s3 = s1.difference_update(s2)
print(type(s3),s3) # 返回None
print(type(s1),s1) # 原集被更新
#输出结果
<class 'NoneType'> None
<class 'set'> {'pudding', 'lisa'}
13、discard()
描述:删除集合中指定的元素,元素不存在不报错,单纯的删除
参数:element 元素
返回值:None(原集合会被修改)
s1 = {'william','lisa','knight','pudding'}
s2 = s1.discard('william')
print(type(s2),s2)
print(type(s1),s1)
输出结果
<class 'NoneType'> None
<class 'set'> {'lisa', 'knight', 'pudding'}
14、intersection_update()
描述:交集运算,原集合更新
参数:set 要对比的集合
返回值:None(原集合会被修改)
s1 = {'william','lisa','knight','pudding'}
s2 = {'william','xxxx'}
s3 = s1.intersection_update(s2)
print(type(s3),s3) # 返回None
print(type(s1),s1) # 原集合更新
输出结果
<class 'NoneType'> None
<class 'set'> {'william'}
15、isdisjoint()
描述:判断是否有交集,如果有交集则返回False,没有返回True
参数:set 要对比的集合
返回值:返回一个布尔值
s1 = {'william','lisa','knight','pudding'}
s2 = {'xxxx','lisa'}
s3 = s1.isdisjoint(s2) # 有交集则返回False
print(type(s3),s3)
#--------------------------------------------
s4 = {'william','lisa','knight','pudding'}
s5 = {'xxxx','yyyyy','kkkkkk','uuuuuu'}
s6 = s4.isdisjoint(s5) # 没有交集则返回True
print(type(s6),s6)
输出结果:
<class 'bool'> False
<class 'bool'> True
16、symmetric_difference_update()
描述:对称差集运算,原集合更新
参数:set 要对比的集合
返回值:None(原集合会被修改)
s1 = {'william','lisa','knight','pudding'}
s2 = {'william','pudding','xxxxxx'}
s3 = s1.symmetric_difference_update(s2)
print(type(s3),s3) # 返回None
print(type(s1),s1) # 对称差集运算,原集合更新
输出结果:
<class 'NoneType'> None
<class 'set'> {'lisa', 'knight', 'xxxxxx'}