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()。如果值不可雜湊,請先轉換成合適的可雜湊表示方式,或改用其他去重策略;集合無法直接包含可變動的清單或字典。