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)) # 3
clear()
清空集合中的所有元素。
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 的聯集、交集和差集。