リストのすべての順列の生成
要素のリストが与えられた場合、タスクは要素の可能なすべての順列を生成することです。順列は、リスト内の要素のさまざまな組み合わせです。
標準ライブラリ ソリューション
Python 標準ライブラリは、この目的のために itertools.permutations 関数を提供します。
import itertools list(itertools.permutations([1, 2, 3]))
このコードは、リスト [1, 2, 3] のすべての順列を生成し、それらをタプルのリスト。
代替実装
再帰を使用した置換関数の代替実装を次に示します。
def permutations(elements): if len(elements) <= 1: yield elements return for perm in permutations(elements[1:]): for i in range(len(elements)): yield perm[:i] + elements[0:1] + perm[i:]
この実装は次のように置換を構築します。リストの最初の要素を残りの要素の順列の異なる位置に繰り返し追加します。 elements.
もう 1 つの代替アプローチでは、itertools.product を使用します。
def permutations(iterable, r=None): pool = tuple(iterable) n = len(pool) r = n if r is None else r for indices in product(range(n), repeat=r): if len(set(indices)) == r: yield tuple(pool[i] for i in indices)
この実装は、0 から n-1 (n はリストの長さ) までのインデックスの可能なすべての組み合わせを反復し、インデックスが一意である場合は、各組み合わせからの順列 (リスト内の各要素が 1 回含まれていることを示します)。
以上がPython でリストのすべての順列を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。