配列のリストがあり、配列内の要素のデカルト積を取得したいと思います。
これをより具体的にするために例を使用します...
itertools.productがトリックを行うようですが、私は少し詳細にこだわっています。
arrays = [(-1,+1), (-2,+2), (-3,+3)];
私が行った場合
cp = list(itertools.product(arrays));
私は得る
cp = cp0 = [((-1, 1),), ((-2, 2),), ((-3, 3),)]
しかし、私が欲しいのは
cp1 = [(-1,-2,-3), (-1,-2,+3), (-1,+2,-3), (-1,+2,+3), ..., (+1,+2,-3), (+1,+2,+3)].
私はいくつかの異なることを試しました:
cp = list(itertools.product(itertools.islice(arrays, len(arrays))));
cp = list(itertools.product(iter(arrays, len(arrays))));
彼らはすべてcp1ではなくcpをくれました。
何か案は?
前もって感謝します。
>>> list(itertools.product(*arrays))
[(-1, -2, -3), (-1, -2, 3), (-1, 2, -3), (-1, 2, 3), (1, -2, -3), (1, -2, 3), (1, 2, -3), (1, 2, 3)]
これにより、すべてのペアがproduct
への個別の引数として供給され、それらのデカルト積が得られます。
バージョンが機能しないのは、product
に引数を1つだけ与えているためです。 1つのリストのデカルト積を求めるのは簡単なケースであり、1つの要素(引数として与えられたリスト)のみを含むリストを返します。
>>> arrays = [(-1,+1), (-2,+2), (-3,+3)]
>>> list(itertools.product(*arrays))
[(-1, -2, -3), (-1, -2, 3), (-1, 2, -3), (-1, 2, 3), (1, -2, -3), (1, -2, 3), (1, 2, -3), (1, 2, 3)]