時間: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中,返回 False 和 True ,打印結果如下:
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 的真子集。
使用符號 < 檢查真超集,> 檢查是否是真子集。