HOWTO · Python

在 Python 中獲取列表的並集

列表的並集反映了來自不同列表的所有元素將放在一個列表中。

本頁內容

在 Python 中,+ 會串接清單:將第二個清單的項目接在第一個清單後面,並保留重複值。這與數學上的集合聯集不同;集合聯集會讓每個不同的值只出現一次,而且不保證順序。若順序和重複值都很重要,請使用串接;需要排序時加上 sorted();需要不重複的可雜湊值時則使用 set()。以下範例皆可獨立執行,並展示結果值。

使用 + 串接兩個清單並保留重複值

使用 + 串接兩個清單,可保留原有順序及每個項目。結果會是新的清單,因此兩個輸入清單仍可供後續使用。

first = ["red", "blue"]
second = ["blue", "green"]

combined = first + second
print(combined)
['red', 'blue', 'blue', 'green']

結果清單會先包含 first 的項目,再接著包含 second 的項目;由於兩個輸入清單都有 "blue",因此它會出現兩次。這是清單串接,不是只保留唯一值的集合聯集。

排序串接後的清單

先串接清單,再將結果傳入 Python 內建的 sorted() 函式。它會回傳一個新的升冪排序清單,且不會更動輸入清單。排序不會移除重複值,因此每次出現的值都會保留在結果中。

first = [11, 20, 1, 2, 3, 4, 5]
second = [2, 4, 6, 8, 10]

combined = first + second
sorted_combined = sorted(combined)
print(sorted_combined)
[1, 2, 2, 3, 4, 4, 5, 6, 8, 10, 11, 20]

對數字而言,值會依數值大小排序。待排序的值必須能彼此比較;例如,Python 並未定義整數與字串之間通用的升冪順序。

串接兩個清單並移除重複值

使用 set() 將串接後的清單轉換成集合;如果程式其餘部分需要清單,再將集合轉回清單。集合會保留每個不同值的一份,但不保證迭代順序。集合元素必須可雜湊,因此數字和字串等值適用,但巢狀清單不適用。

first = [1, 2, 3, 4, 5]
second = [2, 4, 6, 8, 10]

unique_values = list(set(first + second))
print(unique_values)
[1, 2, 3, 4, 5, 6, 8, 10]

當唯一值是否存在比位置更重要時,適合使用這種方式。如果串接後的值也必須排序,請明確使用 sorted() 排序結果清單。

串接兩個以上的清單並移除重複值

有多個輸入清單時,可在集合上呼叫 union(),並將每個清單作為引數傳入。union() 是集合方法;它接受多個可迭代物件,並回傳一個包含所有不同可雜湊值的集合。若所需的回傳型別是清單,請將結果轉成清單。與兩個清單的範例相同,輸出順序不保證固定。

first = [1, 2, 3, 4, 5]
second = [2, 4, 6, 8, 10]
third = [5, 6, 7, 8, 11, 15, 18]

unique_values = list(set().union(first, second, third))
print(unique_values)
[1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 15, 18]

若要加入另一個清單,將它作為另一個引數傳給 union()。如果值不可雜湊,請先轉換成合適的可雜湊表示方式,或改用其他去重策略;集合無法直接包含可變動的清單或字典。