17_集合(set)


時間:2018-11-05 作者:魏文應


一、集合

集合和列表相似,不同點在于:

  • 集合中只能存儲不可變對象。
  • 集合中存儲的對象時無序(不是按照元素的插入順序保存)。
  • 集合中不能出現(xiàn)重復的元素。

創(chuàng)建集合

通過大括號 { } 創(chuàng)建集合:

s = {10, 2, 2, 2, 2, 2}
print(s, type(s))

上面,相同的集合元素 2 會被去掉,只保留一個 2,打印結果如下:

{10, 2} <class 'set'>

集合中,是不能有可變對象的,比如,下面寫法會報錯:

s = {[1, 2, 3], [4, 5, 6]}  # TypeError: unhashable type: 'list'

還可以通過 set() 方法創(chuàng)建一個集合:

s = set()  # 創(chuàng)建了一個空集合
s = set([1, 2, 3, 2, 3, 5])  # 列表轉換為集合
print(s)
s = set('hello')  # 字符串轉換為集合
print(s)
s = set({'a': 1, 'b': 2})  # 使用set()將字典轉換為集合時,只保留了鍵,值會被去掉
print(s)

上面代碼,打印結果如下:

{1, 2, 3, 5}
{'h', 'o', 'l', 'e'}
{'b', 'a'}

集合是 無序的,無法直接索引:

s = {'b', 'a', 1, 2, 30}
print(s, type(s))
# print(s[0]) # 集合時無序的,不能這樣直接索引
print(list(s)[0])    # 可以先通過list轉換為列表,再索引,但用處不大

二、集合相關操作

檢查元素

可以使用 in 或者 not in 關鍵字來檢查集合中元素存在情況。例如:

s = {'b', 'a', 1, 2, 30}
print('c' in s)
print('c' not in s)

字符 c 不在集合 s中,返回 FalseTrue ,打印結果如下:

False
True

添加元素(add)

通過 add() 方法向一個集合中添加元素:

s = {1, 2, 7}
s.add(4)
print(s)

上面代碼,打印結果如下:

{1, 2, 4, 7}

添加集合(update)

可以使用 update() 方法,將一個集合中的元素添加到當前集合中。例如:

s1 = set('hello')
s2 = set([1, 2, 3, 4])
s1.update(s2)
print(s1)

上面,將 s2 中的元素添加到了 s1 中,打印結果如下:

{1, 'l', 'e', 2, 3, 4, 'o', 'h'}

隨機刪除元素(pop)

可以使用 pop() 方法,隨機刪除集合中的一個元素,并返回被刪除的元素:

s = {1, 2, 3, 4}
result = s.pop()
print(result)
print(s)

如果集合為空,程序會拋出異常。上面代碼打印結果如下:

1
{2, 3, 4}

刪除指定元素(remove)

使用 remove() 方法,刪除集合中指定的元素:

s = {1, 2, 3, 4}
s.remove(2)
print(s)

只能刪除集合里面有的元素,否則會拋出異常。打印結果如下:

{1, 3, 4}

三、集合數(shù)學運算

數(shù)學上,我們可以對集合進行運算。

交集運算

使用符號 & ,進行交集運算:

s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
result = s1 & s2
print(result)

交集運算,不會影響 s1 和 s2 原來的值。打印結果如下:

{3, 4}

并集運算

可以使用符號 | 進行并集計算:

s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
result = s1 | s2
print(result)

打印結果如下:

{1, 2, 3, 4, 5, 6}

差集運算

可以使用符號 - 進行差集運算:

s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
result = s1 - s2
print(result)

上面,計算得到了,只在 s1 中有,在 s2 中沒有的元素,打印結果如下:

{1, 2}

異或集運算

去掉兩個集合中都有的元素,稱為異或集運算 :

s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
result = s1 ^ s2
print(result)

上面代碼中,打印結果中,不包含兩個集合中相同的元素(也就是交集部分的元素):

{1, 2, 5, 6}

子集檢查

首先,要理解這么一個數(shù)學概念:

如果a集合中的元素全部都在b集合中出現(xiàn),那么這個b集合就是a集合的子集,b集合是a集合的超集。

使用符號 <= ,檢查一個集合是否是另一個集合的子集:

s1 = {1, 2, 3}
s2 = {1, 2, 3, 4, 5, 6}
print(s1 <= s2)

上面打印結果如下:

True

使用符號 >= ,檢查一個集合是否是另一個集合的超集:

s2 = {1, 2, 3, 4, 5, 6}
s1 = {1, 2, 3}
print(s1 >= s2)

上面打印結果如下:

True

數(shù)學上:

如果超集b中含有子集a中的所有元素,并且b中還有a中沒有的元素,則b就是a的真超集,a 是 b 的真子集。

使用符號 < 檢查真超集,> 檢查是否是真子集。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容