Python 集合(Set)詳解:新手指南

更新日期: 2025 年 1 月 22 日

在 Python 編程中,集合(Set) 是一種非常有用的數據結構,用於存儲多個不重複的元素。

集合提供了高效的成員測試以及數學集合運算,如聯集、交集和差集。

對於剛開始學習 Python 的新手來說,理解並掌握集合的概念和用法,將有助於編寫更高效、簡潔的代碼。

本文將詳細介紹 Python 中的集合,包括其基本概念、創建方式、基本操作、集合方法以及實際應用,幫助您在實際開發中靈活運用。


什麼是集合?

集合(Set) 是 Python 中的一種內建數據結構,用於存儲 無序的、無重複元素 的集合。

集合的主要特點是:

  • 元素唯一:集合中不存在相同的元素。
  • 無序性:集合中的元素沒有特定的順序,無法通過索引訪問。

集合在許多情況下都非常有用,特別是在需要確保數據的唯一性或進行集合運算(如聯集、交集)時。


創建集合

使用大括號 {} 創建集合

可以使用大括號 {} 來創建集合,集合中的元素用逗號 , 分隔。

示例:

my_set = {1, 2, 3}
print(my_set)  # 輸出:{1, 2, 3}

注意:

  • 空的大括號 {} 創建的是 字典(dict),而不是集合。
  • 創建空集合需要使用 set() 函數。

使用 set() 函數創建集合

使用 set() 函數可以創建集合,特別是當需要創建空集合時。

創建空集合:

empty_set = set()
print(empty_set)  # 輸出:set()

從其他可迭代物件創建集合:

my_list = [1, 2, 2, 3, 4]
my_set = set(my_list)
print(my_set)  # 輸出:{1, 2, 3, 4}

集合的特性

無序性

集合是無序的,這意味著:

  • 無法通過索引訪問集合中的元素。
  • 集合的元素順序可能與添加順序不同。

示例:

my_set = {3, 1, 4, 2}
print(my_set)  # 輸出可能是:{1, 2, 3, 4}

元素的唯一性

集合中的元素必須是唯一的,重複的元素會被自動去除。

示例:

my_set = {1, 2, 2, 3}
print(my_set)  # 輸出:{1, 2, 3}

基本集合操作

添加元素

使用 add() 方法可以向集合中添加元素。

示例:

my_set = {1, 2, 3}
my_set.add(4)
print(my_set)  # 輸出:{1, 2, 3, 4}

注意:

  • 如果添加的元素已存在,集合不會改變。

移除元素

可以使用 remove()discard() 方法移除元素。

remove() 方法:

  • 移除指定元素,如果元素不存在,會引發 KeyError
my_set = {1, 2, 3}
my_set.remove(2)
print(my_set)  # 輸出:{1, 3}
# my_set.remove(5)  # KeyError: 5

discard() 方法:

  • 移除指定元素,如果元素不存在,不會引發錯誤。
my_set.discard(5)  # 不會引發錯誤

pop() 方法:

  • 隨機移除並返回一個元素,集合為空時引發 KeyError
element = my_set.pop()
print(element)
print(my_set)

成員測試

使用 in 關鍵字可以測試元素是否在集合中。

示例:

my_set = {1, 2, 3}
print(2 in my_set)    # 輸出:True
print(5 not in my_set)  # 輸出:True

集合之間的運算

集合支持許多標準的集合運算,如聯集、交集、差集和對稱差集。

聯集

  • 運算符: |
  • 方法: union()
  • 作用: 返回兩個集合的所有元素(不重複)。

示例:

set_a = {1, 2, 3}
set_b = {3, 4, 5}

# 使用運算符
set_union = set_a | set_b
print(set_union)  # 輸出:{1, 2, 3, 4, 5}

# 使用方法
set_union = set_a.union(set_b)
print(set_union)  # 輸出:{1, 2, 3, 4, 5}

交集

  • 運算符: &
  • 方法: intersection()
  • 作用: 返回兩個集合的共同元素。

示例:

set_a = {1, 2, 3}
set_b = {3, 4, 5}

set_intersection = set_a & set_b
print(set_intersection)  # 輸出:{3}

差集

  • 運算符: -
  • 方法: difference()
  • 作用: 返回在第一個集合但不在第二個集合中的元素。

示例:

set_a = {1, 2, 3}
set_b = {3, 4, 5}

set_difference = set_a - set_b
print(set_difference)  # 輸出:{1, 2}

對稱差集

  • 運算符: ^
  • 方法: symmetric_difference()
  • 作用: 返回兩個集合中不重複的元素(非共同元素)。

示例:

set_a = {1, 2, 3}
set_b = {3, 4, 5}

set_sym_diff = set_a ^ set_b
print(set_sym_diff)  # 輸出:{1, 2, 4, 5}

集合方法

集合提供了一系列的方法,用於集合的操作和處理。

  • add(element):添加元素到集合。
  • remove(element):移除指定元素,元素不存在時引發錯誤。
  • discard(element):移除指定元素,元素不存在時不引發錯誤。
  • pop():隨機移除並返回一個元素。
  • clear():清空集合。
  • copy():返回集合的淺拷貝。
  • update(other_set):使用其他集合的元素更新當前集合(聯集)。
  • intersection_update(other_set):保留與其他集合的共同元素(交集)。
  • difference_update(other_set):移除存在於其他集合的元素(差集)。
  • symmetric_difference_update(other_set):保留兩個集合中不重複的元素(對稱差集)。

示例:

set_a = {1, 2, 3}
set_b = {3, 4, 5}

set_a.update(set_b)
print(set_a)  # 輸出:{1, 2, 3, 4, 5}

不可變集合 frozenset

frozenset 是不可變的集合,一旦創建就不能修改。它可以用作字典的鍵或其他集合的元素。

創建 frozenset

immutable_set = frozenset([1, 2, 3])
print(immutable_set)  # 輸出:frozenset({1, 2, 3})

特點:

  • 不可變性:無法添加、移除元素。
  • 支持集合運算:可以進行聯集、交集等運算,但結果是新的集合。

示例:

set_a = frozenset([1, 2, 3])
set_b = frozenset([3, 4, 5])

set_union = set_a | set_b
print(set_union)  # 輸出:frozenset({1, 2, 3, 4, 5})

集合的實際應用示例

去除列表中的重複元素

使用集合可以輕鬆去除列表中的重複元素。

示例:

my_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = list(set(my_list))
print(unique_list)  # 輸出:[1, 2, 3, 4, 5]

集合的成員測試效率

集合的成員測試(in 操作)效率比列表高,因為集合使用了雜湊表結構。

示例:

my_set = {i for i in range(1000000)}
print(999999 in my_set)  # 輸出:True

注意事項

  1. 集合的元素必須是可雜湊的(不可變的)
  • 例如,列表、字典等可變類型不能作為集合的元素。
  • 可以使用元組(tuple)作為集合的元素。 示例:
   my_set = {(1, 2), (3, 4)}
   # my_set = {[1, 2], [3, 4]}  # TypeError: unhashable type: 'list'
  1. 集合是無序的
  • 無法保證元素的順序,如果需要有序的集合,可以使用 collections.OrderedDict 或其他方法。
  1. 空集合的創建
  • 使用 {} 創建的是空字典,創建空集合需要使用 set()示例:
   empty_set = set()
   empty_dict = {}
   
   print(type(empty_set))  # 輸出:<class 'set'>
   print(type(empty_dict))  # 輸出:<class 'dict'>

總結

  • 集合(Set) 是無序且元素唯一的數據結構,適用於存儲不重複的元素和進行集合運算。
  • 創建集合
    • 使用大括號 {} 創建集合,但空集合需要使用 set()
    • 使用 set() 函數將其他可迭代物件轉換為集合。
  • 基本操作
    • 添加元素:add()
    • 移除元素:remove()discard()pop()
    • 成員測試:使用 in 關鍵字
  • 集合運算
    • 聯集:|union()
    • 交集:&intersection()
    • 差集:-difference()
    • 對稱差集:^symmetric_difference()
  • 不可變集合
    • 使用 frozenset 創建不可變集合,用於需要不可變集合的場合。
  • 實際應用
    • 去除重複元素
    • 高效的成員測試
    • 集合間的運算(如標籤、標識的處理)

透過學習和掌握集合,您可以在 Python 編程中處理許多常見的數據處理問題,更加高效和優雅地編寫代碼。


延伸閱讀

Similar Posts