Python - 集合



Python 中的集合

在 Python 中,集合是一個無序的唯一元素集合。與列表或元組不同,集合不允許重複值,即集合中的每個元素都必須是唯一的。集合是可變的,這意味著在建立集合後,您可以新增或刪除專案。

集合使用花括號 {} 或內建的 set() 函式定義。它們對於成員資格測試、從序列中刪除重複項以及執行常見的數學集合運算(如並集、交集和差集)特別有用。

集合指的是一組不同的物件。它用於將物件組合在一起並研究它們的屬性和關係。集合中的物件稱為集合的元素或成員。

在 Python 中建立集合

在 Python 中建立集合是指定義和初始化一組唯一元素。這包括指定將成為集合一部分的元素,並確保每個元素在集合中都是唯一的。

您可以使用花括號 {} 或 set() 函式在 Python 中建立集合 -

使用花括號

您可以透過在花括號內列出其元素來直接定義一個集合,用逗號分隔每個元素,如下所示 -

my_set = {1, 2, 3, 4, 5}
print (my_set)

它將產生以下結果 -

{1, 2, 3, 4, 5}

使用 set() 函式

或者,您可以使用 set() 函式透過傳遞一個可迭代物件(如列表或元組)來建立集合,該可迭代物件包含您希望包含在集合中的元素 -

my_set = set([1, 2, 3, 4, 5])
print (my_set)

我們得到如下所示的輸出 -

{1, 2, 3, 4, 5}

集合中的重複元素

Python 中的集合是唯一元素的無序集合。如果您嘗試使用重複元素建立集合,則重複元素將自動刪除 -

my_set = {1, 2, 2, 3, 3, 4, 5, 5} 
print (my_set)

獲得的結果如下所示:

{1, 2, 3, 4, 5}

集合可以包含不同資料型別的元素,包括數字、字串,甚至其他集合(只要它們是不可變的):

mixed_set = {1, 'hello', (1, 2, 3)}
print (mixed_set)

產生的結果如下所示:

{1, 'hello', (1, 2, 3)}

在 Python 中,集合支援各種用於操作其元素的基本操作。這些操作包括新增和刪除元素、檢查成員資格以及執行特定於集合的操作,如並集、交集、差集和對稱差集。

在集合中新增元素

要向集合新增元素,可以使用 add() 函式。當您想要將新元素包含到現有集合中時,這很有用。如果該元素已存在於集合中,則集合保持不變:

my_set = {1, 2, 3, 3}
# Adding an element 4 to the set
my_set.add(4)  
print (my_set)

以下是獲得的輸出:

{1, 2, 3, 4}

從集合中刪除元素

您可以使用 remove() 函式從集合中刪除元素。當您想要從集合中消除特定元素時,這很有用。如果元素不存在,則會引發 KeyError:

my_set = {1, 2, 3, 4}
# Removes the element 3 from the set
my_set.remove(3)  
print (my_set)

顯示的輸出如下所示:

{1, 2, 4}

或者,您可以使用discard() 函式從集合中刪除元素(如果存在)。與 remove() 不同,如果在集合中找不到該元素,discard() 不會引發錯誤:

my_set = {1, 2, 3, 4}
# No error even if 5 is not in the set
my_set.discard(5)  
print (my_set)

我們得到如下所示的輸出 -

{1, 2, 3, 4}

集合中的成員資格測試

集合提供了一種有效的方法來檢查元素是否在集合中。您可以使用in關鍵字執行此檢查,如果元素存在則返回True,否則返回False

my_set = {1, 2, 3, 4}
if 2 in my_set:
   print("2 is present in the set")
else:
   print("2 is not present in the set")

以下是上述程式碼的輸出:

2 is present in the set

集合操作

在 Python 中,集合支援各種集合操作,用於操作和比較集合。這些操作包括並集、交集、差集、對稱差集和子集測試。在處理唯一元素的集合並根據集合論執行操作時,集合特別有用。

  • 並集 - 它使用 union() 函式或|運算子組合來自兩個集合的元素。

  • 交集 - 它用於使用 intersection() 函式或&運算子獲取公共元素。

  • 差集 - 它用於使用 difference() 函式或-運算子獲取在一個集合中但在另一個集合中不存在的元素。

  • 對稱差集 - 它用於使用 symmetric_difference() 方法或^運算子獲取在任一集合中但在兩個集合中都不存在的元素。

Python 集合推導式

Python 中的集合推導式是一種基於可迭代物件建立集合的簡潔方法,類似於列表推導式。它用於透過將表示式應用於可迭代物件中的每個專案來生成集合。

當您需要根據應用某些操作的結果建立集合或從另一個可迭代物件中過濾元素時,集合推導式很有用。

語法

集合推導式的語法類似於列表推導式,但您使用花括號 { } 來表示集合,而不是方括號 [ ]:

set_variable = {expression for item in iterable if condition}

示例

在下面的示例中,我們使用集合推導式建立了一個包含 1 到 5 的數字的平方的集合:

squared_set = {x**2 for x in range(1, 6)}
print(squared_set)

獲得的輸出如下所示:

{1, 4, 9, 16, 25}

使用集合推導式過濾元素

您可以在集合推導式中包含條件語句,以根據某些條件過濾元素。例如,要建立 1 到 10 之間偶數的集合,您可以使用帶 if 條件的集合推導式,如下所示:

even_set = {x for x in range(1, 11) if x % 2 == 0}
print(even_set)

這將產生以下輸出:

{2, 4, 6, 8, 10}

巢狀集合推導式

集合推導式也支援巢狀迴圈,允許您從巢狀的可迭代物件建立集合。這對於生成元素的組合或排列很有用。

示例

nested_set = {(x, y) for x in range(1, 3) for y in range(1, 3)}
print(nested_set)

上述程式碼的輸出如下所示:

{(1, 1), (1, 2), (2, 1), (2, 2)}

凍結集合

在 Python 中,凍結集合是唯一元素的不可變集合,類似於常規集合,但區別在於它在建立後不能修改。一旦建立,凍結集合中的元素就不能新增、刪除或修改,這使得它成為您需要不可變集合時的合適選擇。

您可以使用 frozenset() 函式在 Python 中建立凍結集合,方法是傳遞一個可迭代物件(例如列表、元組或其他集合),其中包含您想要包含在凍結集合中的元素。

示例

在下面的示例中,我們建立了一個整數的凍結集合,然後向其中新增一個元素:

my_frozen_set = frozenset([1, 2, 3])
print(my_frozen_set) 
my_frozen_set.add(4)  

以下是上述程式碼的輸出:

frozenset({1, 2, 3})
Traceback (most recent call last):
  File "/home/cg/root/664b2732e125d/main.py", line 3, in <module>
    my_frozen_set.add(4)
AttributeError: 'frozenset' object has no attribute 'add'
廣告