📜  Python – 所有位置字符组合(1)

📅  最后修改于: 2023-12-03 14:46:10.515000             🧑  作者: Mango

Python - 所有位置字符组合

在本文中,我们将探讨如何生成一个给定字符串的所有位置字符组合。例如,给定字符串abc,我们要生成所有可能的字符组合,包括a, b, c, ab, ac, bc, 和 abc

方法一:迭代器法
def combinations(string):
    n = len(string)
    for i in range(2 ** n):
        combo = [string[j] for j in range(n) if (i >> j) & 1]
        yield "".join(combo)

这种方法生成状态二进制表示的迭代器,并使用其生成组合。 例如,给定字符串abc,任何组合都可以表示为二进制数。例如,abc表示为111ab表示为011ac表示为101bc表示为110a表示为001b表示为010c表示为100。 我们迭代所有整数02 ** n,其中n为字符串的长度,按顺序生成所有组合。当整数的二进制表示中的某个位为1时,将其对应的字符添加到组合中。迭代器返回一个组合, 可以使用list()将其转换为列表。

方法二:递归法
def combinations(string):
    def _combinations(string, i, combo):
        if i == len(string):
            yield combo
            return
        yield from _combinations(string, i + 1, combo)
        yield from _combinations(string, i + 1, combo + string[i])
    yield from _combinations(string, 0, "")

这种方法使用递归生成所有组合。我们递归遍历字符串中的所有字符,并将所有组合保存在一个列表中。 在递归过程中,我们使用字符串中的每个字符进行两个递归调用。第一个递归调用包括当前字符。第二个递归调用不包括当前字符。 在我们到达字符串的末尾之后,我们返回到最后一次递归调用,以输出已经生成的所有组合。

测试

假设我们有一个长为3的字符串abc

>>> string = "abc"

我们可以调用combinations()函数,将其作为参数传递给它:

>>> for combo in combinations(string):
...     print(combo)

这将生成以下输出:

a
b
ab
c
ac
bc
abc
结论

现在,每个Python程序员都可以使用我们提供的两种方法生成所有位置字符组合。 您可以针对不同的应用程序选择最适合您需求的方法。