如何在Python程序中获取字符串的K个可能切片

如何在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步: 因此,该函数 返回 切片列表。

切片字符串的代码

示例

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:使用‘itertools.combinations’方法找到一个字符串的所有可能切片,切片数量为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列表中,并将其作为最终结果返回。

itertools.combinations方法的代码

示例

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函数,它将生成用于切割字符串的索引的所有组合。我们可以选择适合我们要求或偏好的任何方法。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程