字符串的组合,不是字符

时间:2015-07-29 23:18:55

标签: combinations

您能告诉我如何获得三个字符串的所有可能组合:Al, Bob, Charlie

所以输出看起来像:Al+Bob+CharlieAl+BobAl+CharlieBob+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:当前回答给我空白输出。所以不行。

1 个答案:

答案 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,它返回所有可能的组合而不重复元素。