python-集合
一、集合
定义:由不同元素组成的集合(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'}
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'}
描述:并集运算,原集合不更新
参数: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'}
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'}
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
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'}