枚举Python中字母表中所有可能的长度为K的字符串

时间:2011-09-27 07:38:24

标签: python combinatorics

  

可能重复:
  is there any best way to generate all possible three letters keywords

如何从字母L中枚举长度为K的所有字符串,其中L只是一个字符列表?例如。如果L = ['A', 'B', 'C']K = 2,我想列举所有可用字母'A''B''C'组成的长度为2的字符串。它们可以重复使用,因此'AA'有效。

据我所知,这基本上是替换的排列。如果这是一个更正确的技术术语,请告诉我....它基本上所有K长度的字符串,您可以通过选择字母L中的任何字母,并可能重用字母,以一种敏感的方式顺序(因此ABBA不相同。)是否有更明确的方式来说明这一点?

无论如何我相信解决方案是:

[ ''.join(x) for x in product(L, repeat=K) ]

但我对其他答案很感兴趣,尤其是天真的方法与快速的Pythonic方法,以及速度考虑的讨论。

2 个答案:

答案 0 :(得分:1)

这是Python Documentation

的一部分

EDIT2:当然正确答案是产品,感谢评论

print  [''.join(x) for x in product('ABC', repeat=3)]

打印27个元素

['AAA', 'AAB', 'AAC', 'ABA', 'ABB', 'ABC', 'ACA', 'ACB', 'ACC', 'BAA', 'BAB', 
'BAC', 'BBA', 'BBB', 'BBC', 'BCA', 'BCB', 'BCC', 'CAA', 'CAB', 'CAC', 'CBA', 
'CBB', 'CBC', 'CCA', 'CCB', 'CCC']

@agf gave the right answer before

答案 1 :(得分:0)

您可以使用itertools

n = 3
itertools.product(*['abc']*n)

这可以为您提供27个元素。