Python 集合(Set)
在本文中,您將學習關于Python集的所有內容;如何創建它們、添加或刪除其中的元素,以及在Python中對集合執行的所有操作。
Python中的集合是什么?
集合是項目的無序集合。每個元素都是唯一的(沒有重復項),并且必須是不可變的(不能更改)。
但是,集合本身是可變的。我們可以在其中添加或刪除項目。
集合可用于執行數學集合運算,例如并集,交集,對稱差等。
如何創建集合?
通過將所有項目(元素)放在大括號{}中并用逗號分隔或使用內置函數來創建集合set()。
它可以具有任意數量的項目,并且它們可以具有不同的類型(整數,浮點數,元組,字符串等)。但是集合不能具有可變元素(例如list,set或dictionary)作為其元素。
示例# 整數集
my_set = {1, 2, 3}
print(my_set)
# 混合數據類型集
my_set = {1.0, "Hello", (1, 2, 3)}
print(my_set)
也嘗試以下示例。
示例# 無重復集合
# 輸出: {1, 2, 3, 4}
my_set = {1,2,3,4,3,2}
print(my_set)
#set不能包含可變項
#這里[3,4]是可變列表
#如果您取消注釋第12行,
#這將導致錯誤。
# TypeError: unhashable type: 'list'
#my_set = {1, 2, [3, 4]}
# 我們可以從列表中生成集合
# 輸出: {1, 2, 3}
my_set = set([1,2,3,2])
print(my_set)
創建一個空集有點特殊。
空括號{}將在Python中創建一個空字典。為了建立一個沒有任何元素的集合,我們使用沒有任何參數的set()函數。
示例# 用{}初始化
a = {}
# 檢查a的數據類型
# 輸出:
print(type(a))
# 初始化使用 set()
a = set()
# 檢查a的數據類型
# 輸出:
print(type(a))
如何在Python中更改集合?
集是可變的。但是由于它們是無序的,因此索引沒有意義。
我們無法使用索引或切片來訪問或更改集合的元素。集不支持它。
我們可以使用add()方法添加單個元素,使用update()方法添加多個元素。update()方法可以采用元組,列表,字符串或其他集合作為其參數。在所有情況下,都避免重復。
示例# 初始化 my_set
my_set = {1,3}
print(my_set)
# 如果取消注釋第9行,
# 你會得到一個錯誤
# TypeError: 'set' object does not support indexing
#my_set[0]
# 增加一個元素
# 輸出: {1, 2, 3}
my_set.add(2)
print(my_set)
# 增加多個元素
# 輸出: {1, 2, 3, 4}
my_set.update([2,3,4])
print(my_set)
# 增加 list 和set
# 輸出: {1, 2, 3, 4, 5, 6, 8}
my_set.update([4,5], {1,6,8})
print(my_set)
運行該程序時,輸出為:{1, 3}
{1, 2, 3}
{1, 2, 3, 4}
{1, 2, 3, 4, 5, 6, 8}
如何從集合中刪除元素?
可以使用discard()和remove()方法從集合中刪除特定項目。
兩者之間的唯一區別是,如果使用discard(),而項目不存在于集合中,則它保持不變。但是remove()在這種情況下會引發錯誤。
以下示例將說明這一點。
示例# 初始化 my_set
my_set = {1, 3, 4, 5, 6}
print(my_set)
# 拋棄一個元素
# 輸出: {1, 3, 5, 6}
my_set.discard(4)
print(my_set)
# 移除已個元素
# 輸出: {1, 3, 5}
my_set.remove(6)
print(my_set)
# 拋棄一個元素
# 沒有出現在 my_set
# 輸出: {1, 3, 5}
my_set.discard(2)
print(my_set)
# remove一個元素
# 沒有出現在 my_set
# 如果沒有注釋#my_set.remove(2),
# 會拋出一個錯誤.
# Output: KeyError: 2
#my_set.remove(2)
同樣,我們可以使用pop()方法刪除并返回一個項目。
集合為無序,無法確定將彈出哪個項目。這是完全任意的。
我們還可以使用clear()方法刪除集合中的所有項目。
示例# 初始化 my_set
# 輸出: 唯一元素集
my_set = set("HelloWorld")
print(my_set)
# pop一個元素
# 輸出: 隨機元素
print(my_set.pop())
# pop 任意元素
# Output:隨機元素
my_set.pop()
print(my_set)
# 清空 my_set
#輸出: set()
my_set.clear()
print(my_set)
Python 集合操作
集合可用于執行數學集合運算,例如并集,交集,差和對稱差。我們可以通過運算符或方法來實現。。
讓我們考慮以下兩組用于以下操作。>>> A = {1, 2, 3, 4, 5}
>>> B = {4, 5, 6, 7, 8}
集合并集
A和B的并集是來自這兩個集合的所有元素的集合。
并集是使用|操作符執行的。也可以使用union()方法來完成。
示例# 初始化 A 和 B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
# 使用 | 運算符
# 輸出: {1, 2, 3, 4, 5, 6, 7, 8}
print(A | B)
在Python shell上嘗試以下示例。# 使用union 函數
>>> A.union(B)
{1, 2, 3, 4, 5, 6, 7, 8}
# 在B上使用并集函數
>>> B.union(A)
{1, 2, 3, 4, 5, 6, 7, 8}
集合相交
A和B的交集是在這兩個集合中共有的一組元素。
交點使用&運算符執行。使用intersection()方法可以完成相同的操作。
示例# 初始化 A 和 B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
# 使用 & 運算符
# 輸出 : {4, 5}
print(A & B)
在Python shell上嘗試以下示例。# 在A上使用交集函數
>>> A.intersection(B)
{4, 5}
# 在B上使用交集函數
>>> B.intersection(A)
{4, 5}
集合差異
A和B的差(A-B)是僅在A中但不在B中的一組元素。類似地,B-A是B中但不在A中的一組元素。
差異是使用 -運算符執行的。使用difference()方法可以完成相同的操作。
示例# 初始化 A 和 B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
# 在A上使用 - 運算符
# Output: {1, 2, 3}
print(A - B)
在Python shell上嘗試以下示例。# 在A上使用差異函數
>>> A.difference(B)
{1, 2, 3}
# 在B上使用-運算符符
>>> B - A
{8, 6, 7}
# 在B上使用差異函數
>>> B.difference(A)
{8, 6, 7}
集合對稱差異
A和B的對稱差異是A和B中的一組元素,但兩者中的元素相同。
對稱差使用^運算符執行。使用symmetric_difference()方法可以完成相同的操作。
示例# 初始化 A 和 B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
# 使用 ^ 運算符
# 輸出: {1, 2, 3, 6, 7, 8}
print(A ^ B)
在Python shell上嘗試以下示例。# 在A上使用symmetric_difference函數
>>> A.symmetric_difference(B)
{1, 2, 3, 6, 7, 8}
# 在B上使用symmetric_difference函數
>>> B.symmetric_difference(A)
{1, 2, 3, 6, 7, 8}
不同的Python集合方法
集合方法很多,上面已經使用了其中的一些方法。這是set對象可用的所有方法的列表。Python Set方法方法描述
將元素添加到集合中
從集合中刪除所有元素
返回集合的副本
返回兩個或多個集合的差作為新集合
如果元素是成員,則從集合中刪除它。(如果元素不在集合中,則不執行任何操作)
返回兩個集合的交集作為新集合
True如果兩個集合的交點為空,則返回
返回 True另一個集合是否包含此集合
返回 True此集合是否包含另一個集合
刪除并返回一個任意的set元素。提高KeyError,如果集合為空
從集合中刪除一個元素。如果元素不是成員,則引發一個KeyError
返回新集合中集合的并集
用自身和其他元素的并集更新集合
其他集合操作
集合會員資格測試
我們可以使用in關鍵字來測試項目是否存在于集合中。
示例# 初始化 my_set
my_set = set("apple")
# 檢查“a”是否存在
# 輸出: True
print('a' in my_set)
# 檢查“p”是否存在
# 輸出: False
print('p' not in my_set)
遍歷集合
使用for循環,我們可以遍歷集合中的每個項目。>>> for letter in set("apple"):
... print(letter)
...
a
p
e
l
集合與內置函數
內置函數如all()、any()、enumerate()、len()、max()、min()、sort()、sum()等常用來與set一起執行不同的任務。帶內置功能功能描述
如果集合的所有元素都為true(或者集合為空),則返回True。
如果集合中的任何元素為true,則返回True。 如果集合為空,則返回False。
返回一個枚舉對象。它包含成對的所有項的索引和值。
返回集合中的長度(項目數)。
返回集合中最大的項目。
返回集合中最小的項目。
從集合中的元素返回一個新的排序列表(不對集合本身進行排序)。
返回集合中所有元素的總和。
Python Frozenset
Frozenset是具有集合特征的新類,但是一旦分配,就不能更改其元素。元組是不可變列表,而凍結集是不可變集。
可變的集合不可散列,因此不能用作字典鍵。另一方面,frozenset是可哈希化的,可用作字典的鍵。
此數據類型支持的方法,如copy(),difference(),intersection(),isdisjoint(),issubset(),issuperset(),symmetric_difference()和union()。由于不可變,因此沒有添加或刪除元素的方法。
示例# 初始化 A 和 B
A = frozenset([1, 2, 3, 4])
B = frozenset([3, 4, 5, 6])
在Python shell上嘗試這些示例。>>> A.isdisjoint(B)
False
>>> A.difference(B)
frozenset({1, 2})
>>> A | B
frozenset({1, 2, 3, 4, 5, 6})
>>> A.add(3)
...
AttributeError: 'frozenset' object has no attribute 'add'