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 split_list in splits:这是一个嵌套循环,它迭代上一次迭代的现有切片。
步骤 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):它将为新切片生成所有可能的 lengths (j)。它将从 1 开始并达到 remaining_length。
步骤 12: new_slices.append(slice_list + [string[:j]]):将新切片附加到 new_slices 列表。它将当前切片列表 (slice_list) 与通过将字符串从 0 切片到 j 而创建的 新切片 连接起来。
步骤 13:slices = new_slices:在为当前迭代生成所有切片后,切片变量将使用 new_slices 列表 进行更新。这将允许下一次迭代基于新切片进行构建。
步骤 14:最后,最终切片列表将包含给定切片数 (k) 的字符串的所有切片。
步骤 15:因此,该函数返回切片列表。
切片字符串的代码
示例
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 # 示例 input_string = "welcome" num_slices = 3 result = get_all_slices_iteration(input_string, num_slices) # 打印结果 for split_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: 将它们作为列表附加到切片列表中。
步骤 9: 使用 itertools.combinations 函数生成所有组合索引从 1 到 n-1。
步骤 10: 迭代这些组合,并通过划分基于所选索引的字符串来创建切片列表。
步骤 11: 收集切片列表中的所有切片配置,并将其作为最终结果返回。
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 # 示例 ist = "welcome" nt = 3 result = gt_combinations (ist, nt) # 打印结果 for split_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 函数,该函数将生成用于切片字符串的所有索引组合。我们可以选择任何适合我们要求或偏好的方法。