Pythonでは、を使用してlist(itertools.permutations("0123456789"))
おり、(予想どおり)単一の文字列のタプルのリストを受け取っています。
3628800のすべてのアイテムを反復処理せずに、その結果を文字列のリストに変換する方法はありますか?
Pythonでは、を使用してlist(itertools.permutations("0123456789"))
おり、(予想どおり)単一の文字列のタプルのリストを受け取っています。
3628800のすべてのアイテムを反復処理せずに、その結果を文字列のリストに変換する方法はありますか?
リスト全体を繰り返さずに、必要に応じて怠惰に実行したい場合は、次を使用できますitertools.imap
。
itertools.imap(lambda x: "".join(x), itertools.permutations("0123456789"))
(私はここlist()
の結果を使用していないpermutations
ので、可能な限り怠惰であることに注意してください)
または、コメントで指摘されているように、ここでも単純なジェネレータ式が機能します。
("".join(x) for x in itertools.permutations("0123456789"))
itertools.imap
便利な構文で多くの反復可能オブジェクトに同じ関数を適用できるという追加の利点があります(後続の引数としてそれらを追加するだけです)が、反復可能オブジェクトが1つしかないため、この特定の使用法では必要ありません。
それをリストに変えることは全体を繰り返します。リスト内包表記を使用してリストに変換できます。これは、リストに変換してからリストのすべての項目を反復処理するよりも優れています。
[''.join(item) for item in itertools.permutations('0123456789')]
リストで終わる必要がない場合は、ジェネレータ式で十分です(に置き換え[]
て()
ください)。