我该如何生成多个字母的所有可能排列列表?

4

我正在制作一个单词生成器,它可以接受几个输入字母,将它们放入所有可能的位置,并与文档匹配以查找单词。如果我的方法不正确,请告诉我!如果可以,请问我该如何做? 谢谢


1
请注意,对于一个字符串 len(s) == n,排列的数量是 n!;这个数字增长得非常快(例如,我的用户名有 3,628,800 种排列方式)。 - jonrsharpe
4个回答

9
使用itertools模块生成给定字母列表的所有排列。
import itertools 
for word in itertools.permutations( list_of_letters ):
   print ''.join(word)

如果列表中有7个字母,这是否也会生成6个字母单词的排列?或者5个?或者4个?等等。 - codeman99
不,只有7个字母的排列,但itertools肯定可以做到你想要的,参见http://docs.python.org/2/library/itertools.html。 - Colin Bernet
谢谢,我很感激。 - codeman99
@codeman99,你可以这样做,只需将所需长度作为第二个参数传递即可。itertools.permutations( list_of_letters, length )文档 - mmaksitaliev

3
您可以编写自己的函数(:
def permutation(head, tail=''):
    if len(head) == 0: 
        print tail
    else:
        for i in range(len(head)):
            permutation(head[0:i] + head[i + 1:], tail + head[i])

2

如果反向运行可能会更快:索引您的文档,并针对每个单词查看它是否是字母列表的子集。


0
def allpermutationsOfString(words):
  if len(words) == 1:
    return [words]
  result = []
  for index, letter in enumerate(words):
    wordWithoutLetter = words[:index] + words[index+1:]
    result = result + [letter + word for word in allpermutationsOfString(wordWithoutLetter)]
  return result

print allpermutationsOfString("watup") #will print all permutations of watup

这是另一种实现算法的方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接