Python Set 用法小結

一、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.集合操作

集合內置方法完整列表: 菜鳥教程 Set集合

方法 描述
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}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章