Python - 根據首元素合併兩個列表列表


介紹

Python 是一種靈活有效的程式語言,廣泛用於各種任務,包括資料處理和分析。在根據第一個元素合併兩個列表列表時,Python 提供了一種高效且優雅的解決方案。要合併這些列表,您將使用內建的 `sorted()` 函式以及自定義排序鍵。該鍵將定義為每個子列表的第一個元素。透過根據此鍵對兩個列表進行排序,您可以確保具有匹配第一個元素的子列表彼此相鄰。

根據首元素合併兩個列表列表

簡潔性和清晰性:Python 以其簡潔性和清晰性而聞名。根據第一個元素合併兩個列表列表的程式碼可以簡潔明瞭地編寫。這使得程式碼更容易理解和維護,即使對於不熟悉 Python 的開發人員也是如此。

內建功能和庫:Python 提供了內建函式和庫,簡化了合併過程。諸如 `sorted()`、`itertools.groupby()` 和列表推導式之類的函式允許根據自定義排序鍵或分組條件進行高效合併。這些內建工具節省了從頭開始實現合併邏輯的時間和精力。

靈活性和自定義:Python 提供了根據特定需求執行合併過程的靈活性。

方法 1:排序和合並

演算法

步驟 1:將兩個列表組合成一個列表。

步驟 2:將兩個列表組合成一個列表。

步驟 3:初始化一個空列表以儲存合併後的子列表。

步驟 4:遍歷排序後的列表。

步驟 5:將當前子列表的第一個元素與前一個子列表的第一個元素進行比較。

步驟 6:如果它們匹配,則合併子列表並更新合併後的列表。

步驟 7:如果它們不匹配,則將當前子列表新增到合併後的列表。

步驟 8:返回合併後的列表。

示例

def merge_lists(list1, list2):
    combined_list = list1 + list2
    sorted_list = sorted(combined_list, key=lambda x: x[0])
    merged_list = [sorted_list[0]]
    
    for sublist in sorted_list[1:]:
        if sublist[0] == merged_list[-1][0]:
            merged_list[-1].extend(sublist[1:])
        else:
            merged_list.append(sublist)
    
    return merged_list


list1 = [[1, 'g'], [3, 'x'], [5, 'e']]
list2 = [[2, 'j'], [4, 'y'], [6, 'u']]

merged = merge_lists(list1, list2)
print(merged)

輸出

[[1, 'g'], [2, 'j'], [3, 'x'], [4, 'y'], [5, 'e'], [6, 'u']]

方法 2:使用字典

演算法

步驟 1:將兩個列表組合成一個列表。

步驟 2:初始化一個空字典。

步驟 3:遍歷組合後的列表。

步驟 4:提取每個子列表的第一個元素,並檢查它是否在字典中作為鍵存在。

步驟 5:如果鍵存在,則使用子列表的其餘元素擴充套件對應的值。

步驟 6:如果鍵不存在,則使用子列表的其餘元素作為其值將其新增到字典中。

步驟 7:透過轉換字典項返回子列表列表。

示例

def merge_lists(list1, list2):
    combined_list = list1 + list2
    merged_dict = {}
    
    for sublist in combined_list:
        key = sublist[0]
        value = sublist[1:]
        
        if key in merged_dict:
            merged_dict[key].extend(value)
        else:
            merged_dict[key] = value
    
    merged_list = [[key] + value for key, value in merged_dict.items()]
    
    return merged_list


list1 = [[1, 'v'], [3, 'c'], [5, 'l']]
list2 = [[2, 'z'], [4, 'y'], [6, 'd']]

merged = merge_lists(list1, list2)
print(merged)

輸出

[[1, 'v'], [3, 'c'], [5, 'l'], [2, 'z'], [4, 'y'], [6, 'd']]

方法 3:使用 itertools.groupby

演算法

步驟 1:建立函式並將兩個列表組合成一個列表。

步驟 2:根據每個子列表的第一個元素對組合後的列表進行排序。

步驟 3:使用 `itertools.groupby` 按第一個元素對排序後的列表進行分組。

步驟 4:初始化一個空列表以儲存合併後的子列表。

步驟 5:遍歷分組後的元素。

步驟 6:從每個組中提取鍵(第一個元素)和值(其餘元素)。

步驟 7:將每個組的值合併到單個子列表中。

步驟 8:將合併後的子列表新增到結果列表中。

步驟 9:返回結果列表。

示例

import itertools

def merge_lists(list1, list2):
    combined_list = list1 + list2
    sorted_list = sorted(combined_list, key=lambda x: x[0])
    grouped = itertools.groupby(sorted_list, key=lambda x: x[0])
    
    merged_list = []
    for key, group in grouped:
        values = list(itertools.chain.from_iterable([x[1:] for x in group]))
        merged_list.append([key] + values)
    
    return merged_list


list1 = [[1, 'f'], [3, 'w'], [5, 'e']]
list2 = [[2, 'r'], [4, 'q'], [6, 's']]

merged = merge_lists(list1, list2)
print(merged)

輸出

[[1, 'f'], [2, 'r'], [3, 'w'], [4, 'q'], [5, 'e'], [6, 's']]

結論

根據第一個元素合併兩個列表列表是 Python 中的常見操作。在本文中,我們研究了實現此任務的三種不同方法。我們討論了演算法,提供了逐步說明,併為每種方法展示了相應的 Python 程式碼和輸出。

透過使用排序和合並、字典或 `itertools.groupby`,我們可以高效地合併這些列表,同時保持所需的結構。根據資料的規模和複雜性,您可以為您的特定用例選擇最合適的方法。Python 的靈活性和豐富的庫使其成為資料處理任務(如合併列表)的有效工具。

更新於:2023年8月7日

201 次瀏覽

開啟你的職業生涯

完成課程後獲得認證

開始學習
廣告