一、Set集合基础语法和操作:

set是一个无序且不重复的元素集合。

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。初始化一个集合必须用List、Tuple、String。

基本运算

与数学中的集合操作类似,可做并集、交集等运算。

in和not in:成员运算符。判断元素与集合的包含与不包含关系。

==和!=:判断等于与不等于。

<:判断绝对子集关系。

<=:判断非绝对子集关系。

>:判断绝对超集关系。

>=:判断非绝对超集关系。

&:求交集。 

|:求并集。

^:求两个集合共同元素之外的所有元素组成集合。

解释:集合a,集合b。b是a的子集,即b包含于a;如果b不等于(!=)a,则b是a的绝对子集,反过来a是b的绝对超集。

1、创建

s = set() # 先初始化再赋值
s = {11,22,33,44}  #注意在创建空集合的时候只能使用s=set(),因为s={}创建的是空字典

a=set('boy') # 直接创建

d={'k1','k2','k2'}

b=set(['y', 'b', 'o','o']) # 使用list创建

2、添加和更新

添加

s.add(x)  

更新:Input

se = {11, 22, 33}
be = {22,44,55}

se.update(be)  # 把se和be合并,得出的值覆盖se
print(se)
se.update([66, 77])  # 可增加迭代项
print(se)

# s.update( "字符串" ) 与 s.update( {"字符串"} ) 含义不同:
# s.update( {"字符串"} ) 将字符串添加到集合中,有重复的会忽略。
# s.update( "字符串" ) 将字符串拆分单个字符后,然后再一个个添加到集合中,有重复的会忽略。

Output: 

{33, 22, 55, 11, 44}
{33, 66, 22, 55, 11, 44, 77}

3.删除

 discard()remove()pop()

discard(): 删除不存在的元素不会报错

 set.discard()

remove(): 删除不存在的元素会报错

 set.remove()

pop() :用于随机移除一个元素。 ? 又或移除末尾元素

 set.pop()

3.1 清空集合:

set.clear()

 4.集合操作

集合内置方法完整列表:

方法

描述

add()

为集合添加元素

clear()

移除集合中的所有元素

copy()

拷贝一个集合

difference()

返回多个集合的差集

difference_update()

移除集合中的元素,该元素在指定的集合也存在。

discard()

删除集合中指定的元素

intersection()

返回集合的交集

intersection_update()

返回集合的交集。

isdisjoint()

判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。

issubset()

判断指定集合是否为该方法参数集合的子集。

issuperset()

判断该方法的参数集合是否为指定集合的子集

pop()

随机移除元素

remove()

移除指定元素

symmetric_difference()

返回两个集合中不重复的元素集合。

symmetric_difference_update()

移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。

union()

返回两个集合的并集

update()

给集合添加元素

4.1交集

set.intersection() ,  set.intersection_update()也可以使用 a&b

se ={"11","22","33"}
be ={"22"}
temp1 = se.intersection(be)             #取交集,赋给新值
print(temp1)  # 22
print(se.intersection(be))
print(se)  # {11, 22, 33}

temp2 = se.intersection_update(be)      #取交集并更新自己
print(temp2)  # None
print(se)  # 22
print(se&be)  # 22

4.2并集

set.union(),也可以使用a|b

se = {11, 22, 33}
be = {22,44,55}

temp=se.union(be)   #取并集,并赋新值
print(se)       #{33, 11, 22}
print(temp)     #{33, 22, 55, 11, 44}
print(se|be)    #{33, 22, 55, 11, 44}

4.3差集

difference 也可以使用a-bdifference_update

se = {11, 22, 33}
be = {22, 55}

temp1 = se.difference(be)        #找到se中存在,be中不存在的集合,返回新值
print(temp1)        #{33, 11}
print(se-be)        #{33, 11}
print(se)        #{33, 11, 22}

temp2 = se.difference_update(be) #找到se中存在,be中不存在的集合,覆盖掉se
print(temp2)        #None
print(se)           #{33, 11}

4.4包含关系

两个集合之间一般有三种关系,相交、包含、不相交。在Python中分别用下面的方法判断(返回True和False):

  • set.isdisjoint(s):判断两个集合是不是不相交
  • set.issuperset(s):判断集合是不是包含其他集合,等同于a>=b
  • set.issubset(s):判断集合是不是被其他集合包含,等同于a<=b

如果要真包含关系,就用符号操作><

se = {11, 22, 33}
be = {22}

print(se.isdisjoint(be))        #False,判断是否不存在交集(有交集False,无交集True)
print(se.issubset(be))          #False,判断se是否是be的子集合
print(se <= be)                 #False
print(se.issuperset(be))        #True,判断se是否是be的父集合
print(se >= be)                 #True

4.5集合合并

symmetric_differencesymmetric_difference_update

se = {11, 22, 33}
be = {22}

temp1 = se.symmetric_difference(be)         # 合并不同项,并赋新值
print(temp1)    #{33, 11}
print(se)       #{33, 11, 22}

temp2 = se.symmetric_difference_update(be)  # 合并不同项,并更新自己
print(temp2)    #None
print(se)       #{33, 11}