私の目標は、長さ x の可能なすべての文字列 (文字と数字) を生成し、それぞれのコード ブロックをアクティブ化できるようにすることです。(イテレータのように)唯一の問題は、 itertools のものは同じ文字列に文字のコピーを作成しないことです。例えば:
「AAA」の代わりに「ABC」「BAC」「CAB」などを取得します。
助言がありますか?
私の目標は、長さ x の可能なすべての文字列 (文字と数字) を生成し、それぞれのコード ブロックをアクティブ化できるようにすることです。(イテレータのように)唯一の問題は、 itertools のものは同じ文字列に文字のコピーを作成しないことです。例えば:
「AAA」の代わりに「ABC」「BAC」「CAB」などを取得します。
助言がありますか?
>>> 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()
仕事に適したツールではありません。