私の目標は、長さxのすべての可能な文字列(文字と数字)を生成し、それぞれのコードブロックをアクティブにできることです。 (iteratorのように)唯一の問題は、itertools内の文字は同じ文字列の文字をコピーしないことです。例:Pythonですべての文字列を生成するには?
「AAA」ではなく「ABC」「BAC」「CAB」などが表示されます。
提案がありますか?使用itertools.product()
私の目標は、長さxのすべての可能な文字列(文字と数字)を生成し、それぞれのコードブロックをアクティブにできることです。 (iteratorのように)唯一の問題は、itertools内の文字は同じ文字列の文字をコピーしないことです。例:Pythonですべての文字列を生成するには?
「AAA」ではなく「ABC」「BAC」「CAB」などが表示されます。
提案がありますか?使用itertools.product()
:すべての組み合わせを含むリストを作成すると、より長い文字列のための非常に非効率的であることを
>>> import itertools
>>> map(''.join, itertools.product('ABC', repeat=3))
['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']
注 - 代わりにそれらを反復:
for string in itertools.imap(''.join, itertools.product('ABC', repeat=3)):
print string
は、すべての文字を取得するにして数字がstring.uppercase + string.lowercase + string.digits
を使用しています。
使用itertools.product()
あなたが繰り返す手紙をしたい場合:
>>> from itertools import product
>>> from string import ascii_uppercase
>>> for combo in product(ascii_uppercase, repeat=3):
... print ''.join(combo)
...
AAA
AAB
...
ZZY
ZZZ
itertools.combinations()
とitertools.permutations()
はあなたの仕事のための正しいツールではありません。
Python 3が変更され、組み込みの 'map'がイテレータを返すようになりました。 Pythonのバージョンが<3.0でない限り、itertools.imapを使用するという2番目の提案は必要ありません。 – ngoue
質問はタグがついています[タグ:python-2.7] ... – ThiefMaster
あなたは正しいですよ! – ngoue