Published on

[Python 學習筆記] 6-3 Set(集合)

Authors
  • avatar
    Name
    Vic Chen
    Twitter

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}

小技巧

  1. 去重
lst = [1,2,2,3,3,3]
unique = list(set(lst))  # [1,2,3]
  1. 集合作為條件判斷
required = {"apple","banana"}
have = {"apple","orange"}
if required & have:
    print("有交集元素")
  1. 不可變集合 frozenset
fs = frozenset([1,2,3])  # 不可修改,用作 dict key