- Published on
[Python 學習筆記] 6-3 Set(集合)
- Authors
- Name
- Vic Chen
Set(集合)
Set(集合):無序、不重複元素的集合
特點:
- 元素唯一(自動去重)
- 無序(不能用索引訪問)
- 可變(可新增、刪除元素)
- 支援集合運算(交集、聯集、差集、對稱差集)
建立 Set
# 普通創建
s1 = {1, 2, 3}
# 空集合(不能用 {},那是空 dict)
s2 = set()
# 從 list/tuple/string 轉換
s3 = set([1, 2, 2, 3]) # {1,2,3}
s4 = set((1,2,2)) # {1,2}
s5 = set("banana") # {'b','a','n'}
新增元素
s = {1, 2, 3}
s.add(4) # {1,2,3,4}
s.update([5,6]) # {1,2,3,4,5,6} 可合併另一個 iterable
刪除元素
s = {1,2,3,4}
s.remove(3) # {1,2,4},元素不存在會報 KeyError
s.discard(5) # {1,2,4},元素不存在也不報錯
s.pop() # 隨機刪除一個元素,返回該元素
s.clear() # {} 清空集合
查詢元素
s = {1,2,3}
print(2 in s) # True
print(5 in s) # False
集合運算
a = {1,2,3}
b = {3,4,5}
print(a | b) # 聯集 -> {1,2,3,4,5}
print(a & b) # 交集 -> {3}
print(a - b) # 差集 -> {1,2}
print(a ^ b) # 對稱差集 -> {1,2,4,5}
遍歷 Set
s = {10, 20, 30}
for x in s:
print(x) # 無序輸出
for i, x in enumerate(s):
print(i, x) # i 是遍歷順序索引,不是原本順序
常用方法
方法 | 功能 | 範例 | 結果 |
---|---|---|---|
add(x) | 新增元素 | s.add(4) | {1,2,3,4} |
update(iterable) | 合併多個元素 | s.update([5,6]) | {1,2,3,4,5,6} |
remove(x) | 刪除元素,元素不存在報錯 | s.remove(2) | {1,3,4} |
discard(x) | 刪除元素,元素不存在不報錯 | s.discard(10) | {1,3,4} |
pop() | 隨機刪除並返回元素 | s.pop() | 返回刪除元素 |
clear() | 清空集合 | s.clear() | {} |
copy() | 複製集合 | s2 = s.copy() | {1,2,3,4} |
小技巧
- 去重
lst = [1,2,2,3,3,3]
unique = list(set(lst)) # [1,2,3]
- 集合作為條件判斷
required = {"apple","banana"}
have = {"apple","orange"}
if required & have:
print("有交集元素")
- 不可變集合 frozenset
fs = frozenset([1,2,3]) # 不可修改,用作 dict key