从令牌列表生成所有可能的字符串

lbe*_*gni 7 python language-agnostic bash

我有一个令牌列表,如:

hel
lo
bye
Run Code Online (Sandbox Code Playgroud)

我想生成这些字符串的所有可能组合,例如:

hello
lohel
helbye
byehel
lobye
byelo
Run Code Online (Sandbox Code Playgroud)

语言不重要,有什么建议吗?

我发现使用bash生成排列,但这会在一行上进行排列.

Sve*_*ach 19

您的示例可以用Python编写

from itertools import combinations
print list(combinations(["hel", "lo", "bye"], 2))
Run Code Online (Sandbox Code Playgroud)

要将输出再次组合到字符串:

print ["".join(a) for a in combinations(["hel", "lo", "bye"], 2)]
Run Code Online (Sandbox Code Playgroud)

如果您对此函数的实际实现感兴趣,请查看文档.

  • 即使在再次阅读帖子后也找不到此请求.此外,改变这一点是相当微不足道的. (2认同)
  • @kanaka,在我看来,OP只是在寻求建议,而不是完整的解决方案. (2认同)

Ber*_*ron 6

itertools.permutations 可以为你做到这一点.

>>> l = ['hel', 'lo', 'bye']
>>> list(itertools.permutations(l, 2))
[('hel', 'lo'), ('hel', 'bye'), ('lo', 'hel'), ('lo', 'bye'), ('bye', 'hel'), ('bye', 'lo')]
Run Code Online (Sandbox Code Playgroud)

或者如果你想要组合,你可以使用itertools.combinations.

>>> l = ['hel', 'lo', 'bye']
>>> list(itertools.combinations(l, 2))
[('hel', 'lo'), ('hel', 'bye'), ('lo', 'bye')]
Run Code Online (Sandbox Code Playgroud)

  • 从示例中推断,OP实际上需要组合,而不是排列. (2认同)