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函式,該函式將生成用於切片字串的所有索引組合。我們可以選擇任何適合我們需求或偏好的方法。