Python - 合併列表中的範圍字元


簡介

Python 是一種功能強大的程式語言,以其簡潔性和靈活性而聞名。Python 中一項常見的任務是在列表中合併連續的字元。這涉及將連續的字符合併成單個範圍表示。例如,[1, 2, 3, 6, 7, 8, 10] 將被轉換為 [1-3, 6-8, 10]。為了實現這一點,我們將遍歷列表,將每個元素與其前一個元素進行比較。如果差異不等於 1,我們將當前範圍新增到一個新列表中。最後,我們將範圍連線起來並返回合併的結果。這種方法簡化並壓縮了原始列表,使其更易於理解和高效。

Python - 合併列表中的範圍字元

  • 簡化的資訊表示:在列表中合併連續字元重新排列了資訊的表示方式。與其擁有單獨的連續元素,合併的範圍提供了更簡潔、更清晰的表示。這在處理大型記錄或資料集時可能特別有用。

  • 提高效率:合併連續字元減少了列表的整體大小,從而提高了記憶體效率。較小的列表需要更少的儲存空間,並且可以導致更快的處理和資料操作。此外,與處理單個元素相比,對合並範圍執行的操作可能更有效。

  • 改進的資訊分析:合併的連續字元透過提供資料分佈的清晰概述來促進資料分析任務。在處理數值或順序資料時,更容易識別合併範圍內的模式、差距或異常值。這對於各種應用可能很重要,例如統計分析、資料視覺化和機器學習。

  • 簡化的資料操作:合併連續字元重新排列資料以進行操作。它允許輕鬆地切割、過濾和轉換合併的範圍,從而實現更有效和簡潔的程式碼。例如,當對一系列值執行計算或聚合時,使用合併的範圍可以降低程式碼的複雜性。

  • 改進的使用者體驗:合併連續字元可以改善涉及顯示或與資料互動的應用程式中的使用者體驗。向用戶顯示合併的範圍可以提供更清晰、更直觀的表示形式。它減少了混亂,並幫助使用者快速理解資料中的基本模式或趨勢。

方法 1:迭代比較

演算法

步驟 1:初始化一個空列表“merged”,用於儲存合併的範圍。

步驟 2:遍歷給定列表中的每個元素“num”。

步驟 3:如果“merged”為空或當前“num”不等於前一個元素加 1,則將當前“num”作為單獨的範圍新增到“merged”。

步驟 4:否則,透過將其結束值設定為“num”來更新“merged”中的最後一個範圍。

步驟 5:重複步驟 3-4,直到處理完列表中的所有元素。

步驟 6:返回“merged”列表。

示例

def merge_ranges_iterative(lst):
    merged = []
    for num in lst:
        if not merged or num != merged[-1][-1] + 1:
            merged.append([num])
        else:
            merged[-1].append(num)
    return merged

lst = [1, 2, 3, 6, 7, 8, 10]
result = merge_ranges_iterative(lst)
print(result)

輸出

 [[1, 2, 3], [6, 7, 8], [10]]

方法 2:遞迴比較

演算法

步驟 1:初始化一個空列表“merged”,用於儲存合併的範圍。

步驟 2:定義一個使用者定義函式“merge_recursive”,它接受三個引數:“lst”、“start”和“end”。

步驟 3:在函式內部,檢查基本情況:如果“end”等於“lst”的長度減 1,則將從“start”到“end”(包含)的當前範圍新增到“merged”並返回。

步驟 4:比較當前元素“lst[end+1]”與下一個元素。如果差異不等於 1,則將從“start”到“end”的當前範圍新增到“merged”,並遞迴呼叫“merge_recursive()”,其中“start”設定為“end+1”,“end”也設定為“end+1”。

步驟 5:如果差異為 1,則將“end”引數更新為“end+1”並重復步驟 4。

步驟 6:最初使用“start”和“end”為 0 呼叫“merge_recursive”函式。

步驟 7:返回“merged”列表。

示例

def merge_ranges_recursive(lst):
    merged = []
    
    def merge_recursive(lst, start, end):
        if end == len(lst) - 1:
            merged.append(lst[start:end+1])
            return
        
        if lst[end+1] - lst[end] != 1:
            merged.append(lst[start:end+1])
            merge_recursive(lst, end+1, end+1)
        else:
            merge_recursive(lst, start, end+1)
    
    merge_recursive(lst, 0, 0)
    return merged

lst = [1, 2, 3, 6, 7, 8, 10]
result = merge_ranges_recursive(lst)
print(result)

輸出

[[1, 2, 3], [6, 7, 8], [10]]

方法 3:連續範圍構建

演算法

步驟 1:對輸入列表“lst”進行升序排序。

步驟 2:初始化一個空列表“merged”,用於儲存合併的範圍。

步驟 3:初始化“start”和“end”變數為“lst”的第一個元素。

步驟 4:遍歷每個元素“num”,從“lst”的第二個元素開始:如果“num”等於“end”加 1,則將“end”更新為“num”。否則,將從“start”到“end”的當前範圍新增到“merged”,將“start”和“end”更新為“num”,並重復該過程。

步驟 5:迴圈結束後,將從“start”到“end”的最後一個範圍新增到“merged”。

步驟 6:返回“merged”列表。

示例

def merge_ranges_consecutive(lst):
    lst.sort()
    merged = []
    start = end = lst[0]
    
    for num in lst[1:]:
        if num == end + 1:
            end = num
        else:
            merged.append(list(range(start, end+1)))
            start = end = num
    
    merged.append(list(range(start, end+1)))
    return merged

lst = [1, 2, 3, 6, 7, 8, 10]
result = merge_ranges_consecutive(lst)
print(result)

輸出

 [[1, 2, 3], [6, 7, 8], [10]]

結論

在本文中,我們研究了三種不同的方法,使用 Python 在列表中合併連續字元。迭代比較、遞迴比較和連續範圍構建方法提供了實現所需結果的不同方式。瞭解分步演算法和相應的 Python 程式碼,以及語法說明,有助於有效地實現這些方法。透過合併連續字元,我們能夠簡化和壓縮列表,從而提高 Python 程式的清晰度和效率。

更新於: 2023年8月7日

132 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告