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

发布于 2024-12-06 19:52:07 字数 762 浏览 1 评论 0原文

可能的重复:
有没有最好的方法来生成所有可能的三个字母关键字

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

据我了解,这本质上是带有替换的排列。如果对此有更正确的技术术语,请告诉我......它本质上是所有长度为 K 的字符串,您可以通过从字母表 L 中选择任何字母,并可能以敏感的方式重复使用字母来制作顺序(因此根据此 ABBA 不同。)是否有更清晰的方法来说明这一点?

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

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

但我对这个问题的其他答案感兴趣,特别是。简单的方法与快速的 Python 方法,以及速度考虑因素的讨论。

Possible Duplicate:
is there any best way to generate all possible three letters keywords

how can I enumerate all strings of length K from an alphabet L, where L is simply a list of characters? E.g. if L = ['A', 'B', 'C'] and K = 2, I'd like to enumerate all possible strings of length 2 that can be made up with the letters 'A', 'B', 'C'. They can be reused, so 'AA' is valid.

This is essentially permutations with replacement, as far as I understand. if theres a more correct technical term for this, please let me know.... its essentially all strings of length K that you can make by choosing ANY letter from the alphabet L, and possibly reusing letters, in a way that is sensitive to order (so AB is NOT identical to BA according to this.) is there a clearer way to state this?

in any case i believe the solution is:

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

but i am interested in other answers to this, esp. naive approaches versus fast Pythonic ones, and discussions of speed considerations.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

计㈡愣 2024-12-13 19:52:07

这是 Python 文档 的一部分

编辑2:当然是正确的答案是产品,感谢您的评论

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 给出了正确的答案之前

this is part of the Python Documentation

EDIT2: of course the right answer is the product, thanks for the comment

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

prints 27 elements

['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

栩栩如生 2024-12-13 19:52:07

您可以使用 itertools

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

这会为您提供预期的 27 个元素。

You can use itertools:

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

This gives you 27 elements as you expected.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文