python3:不是生成所有置换,而是生成长度r的所有非重复组合?

2024-06-01 10:04:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试生成一个长度为r的Vigenere密码密钥的懒惰的iterable集合。我知道itertools和{}方法。但是,这将生成诸如ABCDABCEABCF等键。。。但它永远不会像AABC那样做。在

因此,基本上,我需要元组或字符串的字符不重复(也就是说,一个重复的键可以被切成两半,得到两个相同的一半),但可以包含重复的字符。很好的例子:AABABA,而不是AABAAB。在

我怎么能创建这样一个集合,它不会像这样生成键,并且是惰性迭代的,这样当我想探索长度超过3个字符的键时,就不会破坏内存了?在


Tags: 方法字符串密码密钥iterable字符例子元组
2条回答

听起来你想用itertools.combinations_with_replacement()。除此之外,你可以写一个生成器来过滤掉你不想要的。在

http://docs.python.org/library/itertools.html#itertools.combinations_with_replacement

("".join(s) for s in product(alphabet, repeat=n) if s[:n//2]!=s[n//2:])

编辑:通过@PetrViktorin修复

相关问题 更多 >