1

これは非常に基本的なことですが、どうすればいいのかわかりません。

入力として「選択肢」のリストがあるとします。例えば:

c = [2,3,2]

これは、2 つのオプション、3 つのオプション、2 つのオプションの 3 つの選択肢を表します。出力として、次のようなものが必要です。

[1,1,1]
[1,1,2]
[1,2,1]
[1,2,2]
[1,3,1]
[1,3,2]
[2,1,1]
[2,1,2]
[2,2,1]
[2,2,2]
[2,3,1]
[2,3,2]

したがって、選択肢の各順列。毎回同じ量の選択肢 (この例では 3 つ) である場合、どうすればよいかはわかっていますが、任意の数の選択肢に対して機能する必要があります。これが以前に尋ねられたことは間違いありませんが、私が検索している用語では何も見つかりません.

4

1 に答える 1

4

itertools.product()これは、リスト内包表記で行うことができます:

>>> list(itertools.product(*[range(1, j+1) for j in c]))
[(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2), (1, 3, 1), (1, 3, 2), (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2), (2, 3, 1), (2, 3, 2)]

リストをループし、各列の潜在的な値を表す範囲を作成します。

>>> [range(1, j+1) for j in c]
[range(1, 3), range(1, 4), range(1, 3)]

(私は 3.x を使用し、ジェネレーターを提供します。2.xrange()では、リストになります。あなたは特にそう感じます)。[[1, 2], [1, 2, 3], [1, 2]]xrange()

次に、これを展開してitertools.product()、必要なすべての可能な組み合わせを提供します。

于 2013-02-03T02:03:37.067 に答える