次のリストがあります。
[1,2,3]
[1]
[1,2,3,4]
上記から、次を含むリストを生成したいと思います。
[[1,1,1],[1,1,2],[1,1,3],[1,1,4],
[2,1,1], [2,1,2], [2,1,3], [2,1,4],
[3,1,2], [3,1,3],[3,1,4]]
このプロセスは何と呼ばれますか?
Python リストの階乗を生成しますか?
これを行う組み込みライブラリはありますか?
次のリストがあります。
[1,2,3]
[1]
[1,2,3,4]
上記から、次を含むリストを生成したいと思います。
[[1,1,1],[1,1,2],[1,1,3],[1,1,4],
[2,1,1], [2,1,2], [2,1,3], [2,1,4],
[3,1,2], [3,1,3],[3,1,4]]
このプロセスは何と呼ばれますか?
Python リストの階乗を生成しますか?
これを行う組み込みライブラリはありますか?
>>> import itertools
>>> [list(xs) for xs in itertools.product([1,2,3], [1], [1,2,3,4])]
[[1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 1, 4], [2, 1, 1], [2, 1, 2], [2, 1, 3], [2, 1, 4], [3, 1, 1], [3, 1, 2], [3, 1, 3], [3, 1, 4]]
>>> lists = [[1,2,3], [1], [1,2,3,4]]
>>> from itertools import product
>>> map(list, product(*lists))
[[1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 1, 4], [2, 1, 1], [2, 1, 2], [2, 1, 3], [2, 1, 4], [3, 1, 1], [3, 1, 2], [3, 1, 3], [3, 1, 4]]
注: を使用すると、の反復のmap
そうでなければタプルの結果をリストに簡単に変換できます。product
inputList = [[1,2,3], [1], [1,2,3,4]]
import itertools
print [list(item) for item in itertools.product(*inputList)]
出力
[[1, 1, 1],
[1, 1, 2],
[1, 1, 3],
[1, 1, 4],
[2, 1, 1],
[2, 1, 2],
[2, 1, 3],
[2, 1, 4],
[3, 1, 1],
[3, 1, 2],
[3, 1, 3],
[3, 1, 4]]
他の回答で示唆されてitertools.product
いるように、ここに行く方法ですが、完全を期すために、itertools.product
ここで何をするかを示すために、リスト内包表記を使用したソリューションを示します。
result = [[x,y,z] for x in [1,2,3] for y in [1] for z in [1,2,3,4]]
以下は、通常の for ループを使用した同じもので、少し読みやすくなっています。
result = []
for x in [1,2,3]:
for y in [1]:
for z in [1,2,3,4]:
result.append([x, y, z])