Python 程序获取字符串中 K 个切片的所有可能切片

pythonserver side programmingprogramming

在本文中,用户将了解如何在 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 函数,该函数将生成用于切片字符串的所有索引组合。我们可以选择任何适合我们要求或偏好的方法。


相关文章