集合(set)與數學中集合的概念一致,即包含0個或多個數據項的無序組合。集合中的元素不可重復;元素類型只能是固定數據類型,如整數、浮點數、字符串、元組等,不能是列表、字典和集合等可變數據類型。
tips:Python提供了一個內置函數hash()來計算對象的哈希值,凡是無法計算哈希值(調用內置函數hash()時拋出異常)的對象都不能作為集合的元素,,也不能作為字典對象的”鍵“。
集合的創建
1、創建集合的方式很簡單,只需將逗號分隔的不同元素使用大括號括起來即可。
>>> b={1,5,2,8} # 創建集合
>>> b
{8, 1, 2, 5}
注意:集合元素是無序的,集合的打印效果與定義順序可以不一致,且由於集合元素獨一無二,使用集合類型能夠過濾掉重復元素。
2、也可以使用set()函數將列表、元組等其他類型的數據轉換為集合,如果原來的數據中存在重復元素,則在轉換為集合時會將其刪除。
>>> x = set('runoob') # 將字符串轉換為集合
>>> x
{'b', 'o', 'u', 'n', 'r'}
添加與刪除集合元素
與字典相似,Python也提供了多種方法和函數用於集合元素的添加和刪除,如下所示:
操作函數或方法 | 描述 |
---|---|
S.add(x) | 如果數據項x不在集合S中,將x添加到S中 |
S.update(T) | 合並集合T中的元素到當前集合S中,並自動去除重復元素 |
S.pop() | 隨機刪除並返回集合中的一個元素,如果集合為空則拋出異常 |
S.remove() | 如果x在集合S中,移除該元素;如果x不存在則拋出異常 |
S.discard(x) | 如果x在集合S中,移除該元素;如果x不存在不報錯 |
S.clear() | 清空集合 |
>>> s={1,2,3}
>>> s.add(4) # 添加元素
>>> s.update({4,5,6}) # 更新當前集合,自動忽略重復元素
>>> s
{1, 2, 3, 4, 5, 6}
>>> s.discard(5) # 刪除元素,不存在則忽略該操作
>>> s
{1, 2, 3, 4, 6}
>>> s.remove(5) # 刪除元素,不存在則拋出異常
KeyError: 5
>>> s.pop() # 刪除並返回一個元素
1
集合運算
內置函數len()、max()、min()、sorted()等也適用於集合,另外,Python集合還支持數學意義上的交集、並集、差集、補集等運算,具體操作如下所示:
操作符 | 描述 |
---|---|
S&T | 交集,返回一個新集合,包括同時在S和T中的元素 |
S|T | 並集,返回一個新集合,包括集合S和T中的所有元素 |
S-T | 差集,返回一個新集合,包括在集合S中但不在集合T中的元素 |
S^T | 補集,返回一個新集合,包括集合S和T中的元素,但不包括同時在集合S和T中的元素 |
S<=T | 如果S與T相同或是S是T的子集,返回True;否則返回False,可以用S<T判斷S是否是T的真子集 |
S>=T | 如果S與T相同或是S是T的超集,返回True;否則返回False,可以用S>T判斷S是否是T的真超集 |
>>> a_set = {1,2,3,4,5}
>>> b_set = {1,2,6,7,8}
>>> a_set&b_set # 交集
{1, 2}
>>> a_set|b_set # 並集
{1, 2, 3, 4, 5, 6, 7, 8}
>>> a_set-b_set # 差集
{3, 4, 5}
>>> a_set^b_set # 補集
{3, 4, 5, 6, 7, 8}
>>>
>>> x = {1,2,3}
>>> y = {2,3}
>>> z = {1,2,4}
>>> x >= y # y是否為x的子集
True
>>> x <= z # x是否為z的子集
False