何謂集合

集合(set)儲存的是無序列的元素,而且儲存時會自動移除重複的元素,所以在集合中是不存在重複的元素。

# 方法1
集合型別 = {元素1,元素2,…}
# 方法2
集合型別 = set((元素1,元素2,…))
  1. 使用

    • 方法1 建立集合時,其中的元素可以使用的型別為數值、字串和元組。
    • 方法2 則還可以使用串列,字典。例如:
    # 資料型態:tuple(元組),允許重複元素,且會保持輸入順序 => (1, 2, 3, 1, 2)
    s1 = set((1, 2, 3, 1, 2)) # 集合元素為 1、2、3,重複者會被刪除
    # 資料型態:tuple(元組),元組裡面可以包含不同資料型態,甚至是巢狀元組(把 (2, 3) 當成其中一個元素)。 => ('A', (2, 3), 4)
    s2 = set(('A', (2,3), 4)) # 集合元素為 'A'、(2,3)、4 
    # 資料型態:set(集合),
    s3 = set(range(1, 11)) # 集合元素為 1 ~ 10,range(1, 11) 會產生從 1 到 10 的數字序列(不包含 11,set() 將此序列轉為集合 => {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    # 資料型態:set(集合),{1:'A', 2:'B', 3:'C'} 是一個 dict(字典),將字典傳入 set() 時,預設只會抓取字典的鍵(Keys),忽略值(Values)
    s4 = set({1:'A', 2:'B', 3:'C'}) # 集合元素 為1、2、3
  2. 要建立空集合時,一定要使用 方法2 寫法如下:

    s = set() # 空集合。

集合的基本操作

集合內的元素可以新增刪減,其基本操作語法如下:

功能語法說明
新增語法集合.add(元素)
刪除語法集合.remove(元素)
新增語法集合.update(參數)
說明:參數可以是元素或是串列、元組或字典。
刪除語法集合.discard(元素)
說明:同 remove,其差異是 remove 會產生錯誤訊息,discard 則不會。
刪除語法集合.pop()
說明:隨機刪除集合中的一個元素。

[例]集合基本操作。 (set_1.py)

集合的運算

Python可以對兩個集合進行聯集、交集、差集和互斥等運算,下表為集合運算常用的方法。

運算說明與範例
聯集語法
集合 1 | 集合 2
集合 1.union(集合 2)
簡例print(set1 | set2) # {1, 2, 3, 4}
說明:兩個集合中所有的元素。
交集語法
集合 1 & 集合 2
集合 1.intersection(集合 2)
簡例print(set1 & set2) # {3}
說明:兩個集合中皆有的元素。
差集語法
集合 1 - 集合 2
集合 1.difference(集合 2)
簡例print(set1 - set2) # {1, 2}
說明:屬於集合 1 但不屬於集合 2 的元素組成的集合。
互斥語法
集合 1 ^ 集合 2
集合 1.symmetric_difference(集合 2)
簡例print(set1 ^ set2) # {1, 2, 4}
說明:集合 1 和集合 2 的元素組成的集合,但不包含兩集合皆有的元素。
子集合語法
集合 1 <= 集合 2
集合 1.issubset(集合 2)
簡例
set1 = {1, 2}
set2 = {1, 2, 3}
print(set1 <= set2) # True
說明:判斷集合 1 是否為集合 2 的子集合。
超集合語法
集合 1 >= 集合 2
集合 1.issuperset(集合 2)
簡例
print(set1 >= set2) # False
說明:判斷集合 2 的所有元素,是否都包含在集合 1 中。

[簡例] 學校有熱門音樂社和流行音樂社兩個社團,社團的參加人員名單,可能有重複登錄,又有同時參加兩個社團的情形。現在兩社團要合併成一個社團,請統計兩社團正確的人數,合併後的人數,以及重複參加的同學名單。(檔名:group.py)

[結果]

熱門音樂社原來人數:8人  正確人數:6人
流行音樂社原來人數:10人  正確人數:9人
重複參加社團名單:{'張三', '王一', '趙六'}
合併後社團人數:12人

[簡例] 請撰寫一程式完成下列項目。

  1. 可以使用的號碼為1~7之間的整數。
  2. 電腦以亂數隨機挑選兩個不重複的數字。
  3. 使用者猜測電腦挑選的號碼,使用者有三次猜測的機會。

[結果]

請輸入第 1 個號碼 : 1
請輸入第 2 個號碼 : 2
答錯了
 
請輸入第 1 個號碼 : 3
請輸入第 2 個號碼 : 4
答對了

相關主題與延伸閱讀