python基礎類型set 用法

python 數據結構 set 用法

集合(set)是一個無序的不重複元素序列。

A set object is an unordered collection of distinct hashable objects.
set 是一個無序的,不重複的可hash 對象.

用來 存儲 不重複元素的一個容器,並且元素直接是無序的.

可以使用大括號 { } 或者 set() 函數創建集合.
注意:創建一個空集合必須用 set() 而不是 { },因爲 { } 是用來創建一個空字典。

# 創建一個set 
s = set([3,5,9,10])    
s
{9, 10, 3, 5}
t = set("Hello")         #創建一個唯一字符的集合
t
{'H', 'o', 'e', 'l'}


# 也可以這樣創建一個集合
# s = {3,5,9,10}


#創建一個空集合 
s = set()


# 添加元素
#如果 已經存在的元素,不會重新添加

s = {3,5,9,10}
s.add(5)
s
{9, 10, 3, 5}
s.add(66)
s
{66, 3, 5, 9, 10}



#判斷一個元素是否在  集合可以用 in 
5 in s 
True
6 in s
False
66 in s 
True



# 求集合長度  
len(s)
5


# 刪除元素集合中的一個元素
>>> s.remove(66)
>>> s
{3, 5, 9, 10}



# remove 刪除一個不存在的元素 會報錯 KeyError
s.remove('frank')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: 'frank'



# 也可以用來刪除 元素, 如果不存在不會報錯, 不會對集合做任何操作直接返回None.
#  Remove an element from a set if it is a member.
#  If the element is not a member, do nothing.

>>> s
{3, 5, 9, 10}
>>> s.discard('frank')
>>> s
{3, 5, 9, 10}


# 集合的拷貝 s.copy 這是一個淺拷貝
>>> s = set()
>>> s.add(1)
>>> s.add(10)
>>> s.add(5)
>>> s
{1, 10, 5}
>>> s.add(7)
>>> s
{1, 10, 5, 7}
>>> s.copy()
{1, 10, 5, 7}
>>> s2 = s.copy()
>>> s2
{1, 10, 5, 7}




#集合運算裏面 有交 並 補  差集  運算 

>>> s={1,2,3,4}
>>> s2 = {3,4,5,6,7}
>>> s,s2
({1, 2, 3, 4}, {3, 4, 5, 6, 7})
>>> s
{1, 2, 3, 4}
>>> s2
{3, 4, 5, 6, 7}
>>> s& s2
{3, 4}
>>> s.intersection(s2)  # 交集
{3, 4}
>>> s
{1, 2, 3, 4}
>>> s 
{1, 2, 3, 4}
>>> s2
{3, 4, 5, 6, 7}
>>> s.difference(s2)  # 差集
{1, 2}
>>> s - s2  
{1, 2}

# 集合的並集

>>> s.union(s2)
{1, 2, 3, 4, 5, 6, 7}
>>> s|s2
{1, 2, 3, 4, 5, 6, 7}


集合的交集 和差集 運算

交集 s & s2 或 s.intersection(s2) 交集運算

差集 s - s2 或 s.difference(s2) 差集運算

並集 s |s2 或 s.union(s2) 並集運算

>>> s  
{1, 2, 3, 4}
>>> s2 
{3, 4, 5, 6, 7}
>>> s.symmetric_difference(s2)
{1, 2, 5, 6, 7}
>>> s^s2  
{1, 2, 5, 6, 7}


刪除 兩個集合相同的元素,其他的元素構成一個集合返回. 比如上面的例子, 3,4 是公共元素,去掉兩個集合的公共元素,其他的元素構成一個新的集合返回. {1,2,5,6,7}

s^s2 或 s.symmetric_difference(s2)

判斷集合之間的關係

s.issubset(other) 判斷 自己是不是 other 的子集.即判斷 s <= other 返回 True or False

s.issuperset(other) 判斷 s >= other 返回 True or False

issubset(other)
set <= other
Test whether every element in the set is in other.
# 這個方法是判斷  自己是不是 另一個集合的子集 


issuperset(other)
Report whether this set contains another set.
# 這個方法 判斷 自己 是否包含另一個集合. 


>>> s
{1, 2, 3, 4}
>>> s2
{1, 2, 3, 4, 5, 6}
>>> 
>>> s.issubset(s2)
True


>>> s2.issuperset(s)
True

set裏面 還有很多 xxxxx_update 方法
這裏 的作用 把更新的結果 直接寫回到原集合裏面.就相當於原地修改集合

s.difference_update(other)   # 求差集把結果更新到 s 集合裏面
s.intersection_update(other) # 求交集把結果更新到 s 集合裏面
s.symmetric_difference_update(other)  # 求 這個運算的結果  把結果寫到s裏面. 

下面 舉個例子:

# 差集更新  
s = {1, 2, 3, 4}
s2 = {3, 4, 5, 6, 7}
s - s2
{1, 2}
s.difference(s2)
{1, 2}
s
{1, 2, 3, 4}
s2
{3, 4, 5, 6, 7}
s.difference_update(s2)


# 交集更新 
s = {1, 2, 3, 4}
s2 = {3, 4, 5, 6, 7}
s.intersection(s2)
{3, 4}
s.intersection_update(s2)
s
{3, 4}


# symmetric_difference_update  我也不知道叫什麼運算,暫且叫異或運算吧, 把結果更新到 s 裏面.

s
{1, 2, 3, 4}
s2
{3, 4, 5, 6, 7}

s.symmetric_difference(s2)
{1, 2, 5, 6, 7}

s.symmetric_difference_update(s2)
s
{1, 2, 5, 6, 7}
#  s.update(other)
# update 方法, 將一個其他的集合 更新到自己的集合裏面. 相當於批量add 操作 
# 如果有相同的元素, 也只會有一個更新的到集合裏面. 不會報錯. (集合本身是不重複的特性)
>>> s
{1, 2, 7}
>>> s2 = {11,22,33}
>>> s.update(s2)
>>> s
{1, 2, 33, 22, 7, 11}
>>> s2
{33, 11, 22}

方法 pop()
s.pop () 隨機 刪除 集合中的元素 ,並且返回該元素 , 如果集合是空的,會拋異常KeyError

>>> s = {1,34,56,32,11,35,67,89,56}
>>> s
{32, 1, 34, 35, 67, 11, 56, 89}
>>> s.pop()
32
>>> s.pop()
1
>>> s.pop()
34
>>> s.pop()
35
>>> s.pop()
67
>>> s.pop()
11
>>> s.pop()
56
# 清空集合
# s.clear()   清空集合,使其變成一個空集合.
s = {1,34,56,32,11,35,67,89,56}
s.clear()
s
set()

總結

集合一般可以用來去重操作, 當需要存放不同的元素的時候,可以考慮用set來保存元素.

參考文檔

set集合 https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset

分享快樂,留住感動. 2019-02-02 17:43:06 --frank
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章