Set (集合)
2024年11月12日大约 3 分鐘
學習內容:
- 了解什麼是 Set 以及它的特性
 - 理解 Set 與其他資料結構的不同
 - 學習 Set 的基本操作(添加、移除元素等)
 - 使用 Set 進行集合運算(交集、聯集、差集等)
 - 掌握 Set 的常見方法
 
什麼是 Set (集合)?
Set 是一種內建的資料結構,類似於數學中的集合。它是一個無序且不重複的元素集合,用大括號 {} 表示,或者使用 set() 函數來創建。
範例
fruits = {"apple", "banana", "cherry"}
numbers = set([1, 2, 3, 4, 5])注意:Set 中的元素是無序的,因此不支持索引和切片。
Set 的特性
- 無序性:Set 中的元素沒有特定的順序。
 - 唯一性:Set 中不允許有重複的元素。如果你試圖添加重複的元素,Python 會自動忽略。
 
範例
unique_numbers = {1, 2, 2, 3, 4, 4}
print(unique_numbers)  # {1, 2, 3, 4} (重複的元素被自動移除)基本操作
創建 Set
可以使用大括號 {} 或 set() 函數創建 Set。
set1 = {"apple", "banana", "cherry"}
set2 = set([1, 2, 3, 4, 5])  # 將列表轉換為 Set添加元素
使用 add() 方法添加元素:
fruits = {"apple", "banana"}
fruits.add("cherry")
print(fruits)  # {"apple", "banana", "cherry"}移除元素
- 使用 
remove()方法:如果元素不存在,會引發錯誤。 - 使用 
discard()方法:如果元素不存在,不會引發錯誤。 - 使用 
pop()方法:隨機移除一個元素,因為 Set 是無序的。 
# 使用 remove()
fruits.remove("banana")
print(fruits)  # {"apple"}
# 使用 discard()
fruits.discard("cherry")  # 不會報錯,即使 "cherry" 不在集合中
# 使用 pop()
random_element = fruits.pop()
print(random_element)  # 隨機移除並返回一個元素Set 的集合運算
聯集 (Union)
使用 | 或 union() 方法返回兩個集合的聯集。
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1 | set2)        # {1, 2, 3, 4, 5}
print(set1.union(set2))   # {1, 2, 3, 4, 5}交集 (Intersection)
使用 & 或 intersection() 方法返回兩個集合的交集。
print(set1 & set2)              # {3}
print(set1.intersection(set2))  # {3}差集 (Difference)
使用 - 或 difference() 方法返回兩個集合的差集。
print(set1 - set2)             # {1, 2} (set1 中有而 set2 中沒有的元素)
print(set1.difference(set2))   # {1, 2}對稱差集 (Symmetric Difference)
使用 ^ 或 symmetric_difference() 方法返回兩個集合的對稱差集(只存在於其中一個集合中的元素)。
print(set1 ^ set2)                       # {1, 2, 4, 5}
print(set1.symmetric_difference(set2))   # {1, 2, 4, 5}常見的 Set 方法
len()
計算集合中元素的數量。
print(len(set1))  # 3clear()
清空集合中的所有元素。
set1.clear()
print(set1)  # set()copy()
返回集合的淺複本 (這邊淺的意思,意謂著不是巢狀的深層結構)。
set_copy = set2.copy()
print(set_copy)  # {3, 4, 5}Set 的應用場景
- 數據去重:將列表轉換為 Set 來刪除重複元素。
 - 集合運算:處理多個集合之間的運算,方便進行交集、聯集等操作。
 - 檢查元素是否存在:使用 
in關鍵字進行快速查找。 
範例
# 數據去重
duplicates = [1, 2, 2, 3, 4, 4, 5]
unique_values = set(duplicates)
print(unique_values)  # {1, 2, 3, 4, 5}練習
- 創建一個包含 5 個不同字母的 Set,並嘗試添加一個重複的字母,觀察 Set 的變化。
 - 編寫一個程式,使用 Set 來找出兩個列表之間的共同元素。
 - 使用集合運算計算兩個 Set 的聯集、交集和差集。
 
