您能告诉我如何获得三个字符串的所有可能组合:Al, Bob, Charlie
?
所以输出看起来像:Al+Bob+Charlie
,Al+Bob
,Al+Charlie
,Bob+Charlie
等?
我知道如何组合字符,但不知道它是如何转换为字符串的。
编辑:这里有一个c#代码来执行递归排列:http://www.codeproject.com/Articles/37215/Permutations-in-C-Using-Recursion。我发现其他语言类似。但那些与追逐者打交道。我从哪里开始?
这是我读过的一本书(在python中):
def anagrams(s):
if s == "":
return [s]
else:
ans = []
for w in anagrams(s[1:1]):
for pos in range(len(w)+1):
ans.append(w[:pos]+s[0]+w[pos:])
return ans
我理解递归需要一个基本案例。
编辑2:我有一个答案,但我不知道它是如何工作的,我正在寻找可以在大多数语言中应用的东西,而不必依赖于知道模块。
编辑3:当前回答给我空白输出。所以不行。
答案 0 :(得分:0)
像往常一样itertools
就是你的朋友:
import itertools
def all_combinations(items):
for length in range(1, len(items) + 1):
for combination in itertools.permutations(items, length):
yield combination
list(all_combinations(['Al', 'Bob', 'Mike']))
# Output:
# [('Al',), ('Bob',), ('Mike',), ('Al', 'Bob'), ('Al', 'Mike'), ('Bob', 'Al'), ('Bob', 'Mike'), ('Mike', 'Al'), ('Mike', 'Bob'), ('Al', 'Bob', 'Mike'), ('Al', 'Mike', 'Bob'), ('Bob', 'Al', 'Mike'), ('Bob', 'Mike', 'Al'), ('Mike', 'Al', 'Bob'), ('Mike', 'Bob', 'Al')]
此函数是generator,它返回所有可能的组合而不重复元素。