Python中去除巢狀列表中的所有重複項和排列


在Python中去除巢狀列表中的重複項和排列是一個常見的任務,有助於簡化資料並避免冗餘或重複的元素。本文旨在從巢狀列表中提取唯一的子列表集合,去除任何重複項或排列。透過這樣做,我們將簡化後續操作並確保資料的一致性。在本文中,我們將探討三種不同的方法來實現此目標。每種方法都將附帶分步說明、Python程式碼和輸出,使您能夠理解並實施最適合您特定需求的策略。

方法一:扁平化並轉換為集合

此方法包括將巢狀列表展平成單個列表,然後將其轉換為集合以刪除重複項。以下是執行此方法的步驟:

演算法

  • 步驟1 - 建立一個名為flatten_list的函式,它接受一個巢狀列表作為輸入。

  • 步驟2 - 初始化一個空列表flattened_list,用於儲存展平的元素。

  • 步驟3 - 迭代巢狀列表中的每個元素。

    • a. 如果元素是一個列表,則對其遞迴呼叫flatten_list函式。

    • b. 如果元素不是列表,則將其新增到flattened_list。

  • 步驟4 - 返回flattened_list。

  • 步驟5 - 獲取扁平化列表後,使用set()函式將其轉換為集合。

  • 步驟6 - 將集合轉換回列表以保留元素的順序。

示例

def flatten_list(nested_list):
    flattened_list = []

    for element in nested_list:
        if isinstance(element, list):
            flattened_list.extend(flatten_list(element))
        else:
            flattened_list.append(element)

    return flattened_list

nested_list = [13, 2, [3, 45, [5, 56]], [7, 68, [9, 10]]]
flattened_list = flatten_list(nested_list)
result = list(set(flattened_list))

print(result)

輸出

[2, 3, 68, 5, 7, 9, 10, 45, 13, 56]

方法二:使用遞迴

在此方法中,我們定義一個遞迴函式remove_duplicates_permutations(),它接受一個巢狀列表作為輸入。在函式內部,我們首先使用列表推導式將巢狀列表展平成單個列表,類似於以前的方法。

permutations變數儲存排列的列表,但它可能包含重複項。為了去除重複項,我們將排列列表轉換為集合,然後轉換回列表。此步驟確保我們只擁有唯一的排列。

最後,我們迭代唯一的排列,並將每個排列拆分為與巢狀列表中原始子列表長度相同的子列表。結果列表是我們想要的巢狀列表,其中不包含重複項和排列。

演算法

第二種方法涉及使用遞迴函式從巢狀列表中刪除重複項和排列。

  • 步驟1 - 定義一個名為remove_duplicates_permutations_helper()的函式,它接受一個巢狀列表作為輸入。

  • 步驟2 - 將巢狀列表展平成單個列表。

  • 步驟3 - 使用列表推導式生成扁平化列表的所有可能排列。

  • 步驟4 - 從排列列表中刪除重複項。

  • 步驟5 - 將剩餘的排列轉換回巢狀列表。

示例

def remove_duplicates_permutations_helper(sublist):
    sublist.sort()
    sublist = [sublist[i] for i in range(len(sublist)) if i == 0 or sublist[i] != sublist[i - 1]]
    return sublist

def remove_duplicates_permutations(nested_list):
    for i in range(len(nested_list)):
        nested_list[i] = remove_duplicates_permutations_helper(nested_list[i])
    return nested_list

# Example usage
nested_list = [[1, 25, 1], [42, 3, 44, 4], [5, 6, 76, 5]]
result = remove_duplicates_permutations(nested_list)
print(result)

輸出

[[1, 25], [3, 4, 42, 44], [5, 6, 76]]

方法三:使用巢狀迴圈和列表比較

在此方法中,我們使用第一個迴圈迭代巢狀列表中的每個子列表。對於每個子列表,我們使用第二個迴圈將其與後續的子列表進行比較。

演算法

第三種方法涉及使用巢狀迴圈和列表比較從巢狀列表中刪除重複項和排列。

  • 步驟1 - 定義名為remove_duplicates_permutations()的函式。迭代巢狀列表中的每個子列表。

  • 步驟2 - 將每個子列表與後續的子列表進行比較。

  • 步驟3 - 刪除找到的任何重複或排列的子列表。

  • 步驟4 - 返回修改後的巢狀列表。

示例

def remove_duplicates_permutations(nested_list):
    result = []
    for i in range(len(nested_list)):
        is_duplicate = False
        for j in range(i + 1, len(nested_list)):
            if nested_list[i] == nested_list[j]:
                is_duplicate = True
                break
        if not is_duplicate:
            result.append(nested_list[i])
    return result

# Example usage
nested_list = [[1, 25, 13], [32, 3, 64], [3, 64, 15]]
result = remove_duplicates_permutations(nested_list)
print(result)

輸出

[[1, 25, 13], [32, 3, 64], [3, 64, 15]]

結論

在本文中,我們探討了三種不同的方法來從Python中的巢狀列表中刪除重複項和排列。每種方法都展示了演算法並提供了分步說明。我們介紹了每種方法的語法和程式碼用法,以及相應的輸出。

更新於:2023年9月4日

855 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始
廣告