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'}
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'}

 

posted @ 2017-07-21 16:56  飞天的鱼  阅读(271)  评论(0编辑  收藏  举报