2

長さ r の Vigenere 暗号鍵の遅延反復可能なコレクションを生成しようとしています。itertoolsとそのpermutations()方法を知っています。ABCDただし、これは、ABCE、 ...などのキーを生成しますが、 のABCFようなことは決してしませんAABC

したがって、基本的には、反復的ではない文字のタプルまたは文字列が必要です (つまり、反復キーを半分に分割して 2 つの同一の半分を得ることができます) が、重複する文字を含めることができます。良い例: AABABA、ではありませんAABAAB

このようなキーを生成せず、3 文字を超えるキーを調べたいときに RAM を爆破しないように遅延反復されるコレクションを作成するにはどうすればよいですか?

4

2 に答える 2

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

編集:@PetrViktorinのおかげで修正

于 2012-01-18T00:29:36.093 に答える
2

を使いたいようですねitertools.combinations_with_replacement()。その上で、その周りにジェネレータを記述して、不要なものを除外できます。

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

于 2012-01-18T00:25:36.043 に答える