Python程式:獲取字串的所有可能的K個切片


本文將介紹如何使用Python程式獲取字串的所有可能的K個切片。文章中描述了兩個不同的示例。我們將採用迭代方法來實現預期結果。在第二個示例中,我們將使用itertools.combinations方法來獲得切片字串。

讓我們透過一個示例來演示計算過程。以下示例僅供理解,我們將逐一講解計算過程。

示例1:使用迭代方法查詢字串的所有可能的K個切片。

演算法

步驟1:在Anaconda提示符中開啟Jupyter Notebook,並在其單元格中開始編寫程式碼。

步驟2:使用‘get_all_slices’函式,它接收輸入字串(string)和切片數量‘(k)’。它將初始化一個空的‘slices [[ ]]’列表來儲存結果。

步驟3:函式檢查k是否大於字串長度(n)

步驟4:for i in range(k): 基於迭代的解決方案,用於生成字串的所有可能的切片。

步驟5:range(k)生成從0到k-1的數字序列。

步驟6:new_slices = []: 在外迴圈的每次迭代中初始化一個名為new_slices的空列表。這將儲存當前迭代中新生成的切片。

步驟7:for slice_list in slices: 這是一個巢狀迴圈,它迭代前一次迭代中現有的切片。

步驟8:remaining_length = len(string) - sum(map(len, slice_list)): 計算在獲取現有切片長度後字串的剩餘長度。

步驟9:使用map(len, slice_list)獲取各個切片長度的列表,並計算其總和。

步驟10:透過從字串的總長度中減去此總和來獲得剩餘長度。

步驟11:for j in range(1, remaining_length + 1): 它將生成新切片的所有可能的長度(j)。它將從1開始,達到remaining_length

步驟12:new_slices.append(slice_list + [string[:j]]): 將新切片附加到new_slices列表。它將當前切片列表(slice_list)與透過從0到j切片字串建立的新切片連線起來。

步驟13:slices = new_slices: 在生成當前迭代的所有切片後,slices變數將使用new_slices列表更新。這將允許下一次迭代基於新的切片進行構建。

步驟14:最後,最終的slices列表將包含給定切片數量(k)的字串的所有切片。

步驟15:因此,該函式返回slices列表。

切片字串程式碼

示例

def get_all_slices_iteration(string, k):
    slices = [[]]
    for i in range(k):
        new_slices = []
        for slice_list in slices:
            remaining_length = len(string) - sum(map(len, slice_list))
            for j in range(1, remaining_length + 1):
                new_slices.append(slice_list + [string[:j]])
        slices = new_slices
    
    return slices

# Example 
input_string = "welcome"
num_slices = 3
result = get_all_slices_iteration(input_string, num_slices)
# Print the result
for slice_list in result:
    print(slice_list)

檢視結果 - 示例1

這種方法將迭代地構建切片,透過擴充套件前一次迭代中現有的切片。它可以計算字串的剩餘長度,並在每次迭代中生成新切片的所有可能長度,從而逐步構建所有預期的切片。

輸出

['w', 'w', 'w']
['w', 'w', 'we']
['w', 'w', 'wel']
['w', 'w', 'welc']
['w', 'w', 'welco']
['w', 'we', 'w']
['w', 'we', 'we']
['w', 'we', 'wel']
['w', 'we', 'welc']
['w', 'wel', 'w']
['w', 'wel', 'we']
['w', 'wel', 'wel']
['w', 'welc', 'w']
['w', 'welc', 'we']
['w', 'welco', 'w']
['we', 'w', 'w']
['we', 'w', 'we']
['we', 'w', 'wel']
['we', 'w', 'welc']
['we', 'we', 'w']
['we', 'we', 'we']
['we', 'we', 'wel']
['we', 'wel', 'w']
['we', 'wel', 'we']
['we', 'welc', 'w']
['wel', 'w', 'w']
['wel', 'w', 'we']
['wel', 'w', 'wel']
['wel', 'we', 'w']
['wel', 'we', 'we']
['wel', 'wel', 'w']
['welc', 'w', 'w']
['welc', 'w', 'we']
['welc', 'we', 'w']
['welco', 'w', 'w']

示例2:使用‘itertool.combinational’方法查詢字串的所有可能的K個切片。

程式碼解釋和設計步驟

步驟1:在Anaconda提示符中開啟Jupyter Notebook,並在其單元格中開始編寫程式碼。

步驟2:使用‘get_all_slices’函式,它接收輸入字串(string)和切片數量‘(k)’。它將初始化一個空的‘slices []’列表來儲存結果。

步驟3:然後,該函式檢查k是否大於字串長度(n)。如果是,則返回一個空的切片列表。

步驟4:外迴圈將從1到k-1迭代,這將表示字首中的字元數。

步驟5:內迴圈將從1到n-1迭代,這將表示字尾中的字元數。

步驟6:對於字首字尾長度的每個組合,它們加起來等於字串長度(n)。

步驟7:從輸入字串中提取字首和字尾。

步驟8:將它們作為列表附加到slices列表。

步驟9:使用itertools.combinations函式生成從1到n-1的所有索引組合。

步驟10:迭代這些組合,並透過根據所選索引劃分字串來建立切片列表。

步驟11:在slices列表中收集所有切片配置,並將其作為最終結果返回。

itertool.combinational方法程式碼

示例

import itertools

def gt_combinations(string, k):
    slices = []
    for combo in itertools.combinations(range(1, len(string)), k - 1):
        indices = [0] + list(combo) + [len(string)]
        slice_list = [string[indices[i]:indices[i + 1]] for i in range(k)]
        slices.append(slice_list)
    
    return slices

# Example
ist = "welcome"
nt = 3
result = gt_combinations (ist, nt)

# Print the result
for slice_list in result:
    print(slice_list)

檢視結果 - 示例2

要檢視結果,請在瀏覽器中開啟loactionfile.html。現在單擊按鈕以查詢使用者的當前位置。座標將顯示在html頁面上。

輸出

['w', 'e', 'lcome']
['w', 'el', 'come']
['w', 'elc', 'ome']
['w', 'elco', 'me']
['w', 'elcom', 'e']
['we', 'l', 'come']
['we', 'lc', 'ome']
['we', 'lco', 'me']
['we', 'lcom', 'e']
['wel', 'c', 'ome']
['wel', 'co', 'me']
['wel', 'com', 'e']
['welc', 'o', 'me']
['welc', 'om', 'e']
['welco', 'm', 'e']

在本文中,兩種方法都實現了相同的結果,但實現方式不同。第一種方法使用迭代,第二種方法使用itertools.combinations函式,該函式將生成用於切片字串的所有索引組合。我們可以選擇任何適合我們需求或偏好的方法。

更新於:2023年8月28日

85 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告