【问题标题】:Combinations of Strings, Not Characters字符串的组合,而不是字符的组合
【发布时间】:2015-08-01 06:03:23
【问题描述】:

你能告诉我如何获得三个字符串的所有可能组合: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:当前答案给了我空白输出。所以不工作。

【问题讨论】:

  • 展示你将如何处理字符,有人会帮你修改字符串。
  • 为什么在给我机会编辑和提供您要求的内容之前投了反对票?
  • 那不是我 - 在那里,让我为你投票 :)
  • 我很抱歉。有些人可以这么紧张
  • 如果他们只处理字母或数字,这有什么关系吗?您可以创建一个字典,其中字母为键,字符串为值。从那里开始,一旦你有了字母的组合/排列,你就可以简单地查找相应的字符串或任何你喜欢的对象。如果您曾经一次又一次地对给定级别使用组合/排列,您可以这样做一次并将结果保存在数据库中,使用(C、3、5 等)作为组过滤器值。

标签: combinations


【解决方案1】:

像往常一样,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,它返回所有可能的组合而不重复元素。

【讨论】:

  • 说的很简洁很好!赞成。但是我一直在寻找一种无需导入任何东西的方法来尝试使用其他语言,尽管 python 很棒,但它对为我创建移动应用程序或 C 语言没有用处。
  • 我应该补充一点,我正在努力学习语言并且不想依赖模块。
  • 谢谢。 itertools.combinations 中使用的算法完整包含在我上面链接的文档中。
  • Re: 取决于模块:了解算法的工作原理当然很有用,但对于日常工作,了解您的语言的标准库(以及顶级的 3rd 方库)绝对必要。否则你将不断地重新发明轮子。
  • 感谢您的提示,但希望有伪代码。在查看组合时,我无法“学习”如何获得字符串而不是字符的组合。不过,你完成得如此雄辩。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多