📅  最后修改于: 2023-12-03 14:46:10.515000             🧑  作者: Mango
在本文中,我们将探讨如何生成一个给定字符串的所有位置字符组合。例如,给定字符串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
表示为111
,ab
表示为011
,ac
表示为101
,bc
表示为110
,a
表示为001
,b
表示为010
, c
表示为100
。 我们迭代所有整数0
到2 ** 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程序员都可以使用我们提供的两种方法生成所有位置字符组合。 您可以针对不同的应用程序选择最适合您需求的方法。