Python 中不使用 itertools 的组合

2024 年 8 月 29 日 | 4 分钟阅读

有很多时候我们需要从单个字符串或一组不同的数字中找到不同的组合。

要在 Python 中找到这些组合,我们有 itertools 模块,这是查找不同组合和排列最常用的模块。

此模块是一个非常高效的工具,可以快速找到所有可能的组合。但是 itertools 模块函数并不是我们可以用来查找组合的唯一可能方法。

在本教程中,我们将学习如何在不使用 itertools 的情况下,在 Python 中通过不同方法从字符串中查找不同组合。

不使用 itertools 的 Python 组合

在本节中,我们将编写 Python 程序,通过在其中实现几种方法来查找组合。我们将在 Python 程序中使用以下方法:

  • 使用迭代方法
  • 使用递归方法

在这两种方法中,首先,我们将查看程序并理解其工作原理,然后我们将进入解释部分以理解其中使用的实现。

使用迭代方法查找 Python 组合

要在程序中实现迭代方法,我们必须导入 numpy 库以使用其函数。让我们理解下面的示例。

示例

输出

Enter an input string to find combinations: JavaTpoint
All possible combinations of three letter sets from the string given by you is: 
[('J', 'a', 'v'), ('J', 'a', 'a'), ('J', 'a', 'T'), ('J', 'a', 'p'), ('J', 'a', 'o'), ('J', 'a', 'i'), ('J', 'a', 'n'), ('J', 'a', 't')]

说明

我们在上面的程序中使用了迭代方法来从输入字符串中查找组合。

首先,我们使用了一个默认的 Python 函数,它以输入字符串和组合集长度作为参数。然后,我们将输入字符串转换为元组。我们还检查了组合所需的长度是否不超过字符串的长度。

之后,我们使用 numpy 的 arrange() 函数为元组设置索引。我们将使用索引变量迭代元组。

然后,我们使用反向 for 循环和 while 循环内部的另一个 for 循环迭代元组。在循环迭代之后,我们输出了所需长度的可能组合。

然后,我们从用户那里获取了一个输入字符串。最后,我们从输入字符串中返回了三个集合的组合。

使用递归方法查找 Python 组合

在递归方法方法中,我们将迭代一个列表,该列表包含字符串列表。让我们理解下面的示例。

示例

输出

Enter an input string to find combinations: Python
All possible combinations of three letter sets from the string given by you is: 
[['P', 'y', 't'], ['P', 'y', 'h'], ['P', 'y', 'o'], ['P', 'y', 'n'], ['P', 't', 'h'], ['P', 't', 'o'], ['P', 't', 'n'], ['P', 'h', 'o'], ['P', 'h', 'n'], ['P', 'o', 'n'], ['y', 't', 'h'], ['y', 't', 'o'], ['y', 't', 'n'], ['y', 'h', 'o'], ['y', 'h', 'n'], ['y', 'o', 'n'], ['t', 'h', 'o'], ['t', 'h', 'n'], ['t', 'o', 'n'], ['h', 'o', 'n']]

说明

在上面的程序中,在实现递归方法时,我们没有使用任何特定的 Python 模块。与迭代方法一样,我们使用了一个默认函数在代码中实现递归方法。

在此程序中,我们使用了一个条件来检查组合所需的长度。然后,我们在函数中使用 for 循环内的递归方法。在使用递归方法后,我们从输入字符串返回了所需长度的组合。最后,我们从用户那里获取了字符串输入,并以三个集合的组合作为输出返回。


下一个主题Python 列表推导式