-1

私は6つのリストを持っています、例えば、

a=[1,1,0,0]
b=[0,1,1,0]
c=[0,0,1,1]
d .... until f.

2 つのリストから 6 つのリストまで、考えられるすべてのリストの組み合わせの合計結果を生成したいと考えています。たとえば、a+b、a+c、..a+f の結果を計算したいとします。次に、a+b+c、a+b+d、...など。2 つまたは 3 つのリストの結果を計算する方法は知っていますが、リストの組み合わせを生成する方法に行き詰まっています。次のように、リストのリストを定義し、引数2との組み合わせを使用して、3つのリストに対して可能な2つの組み合わせをすべて生成しようとしました(例として):

import itertools

alphabet = [[0,0,0],[0,0,1],[0,1,0]]

combos = itertools.combinations(alphabet, 2)

usable_combos = []
for e in combos:
    usable_combos.append(e)

しかし、これは単に何も生成しません。を印刷するとusable_combos、次のようになります。

[[0,0,0],[0,0,1],[0,1,0]]

私の質問は: 組み合わせを使用して、私が持っている 6 つの異なるセットに対してすべての可能な組み合わせ (2 から 6 の組み合わせ) を作成するにはどうすればよいですか?

4

1 に答える 1

2

に渡されるrange(1, len(lis)+1)2 番目のパラメータ ( ) の値を取得するために使用します。または2から始めたい場合。rcombinationsrange(2, len(lis)+1)

>>> from itertools import combinations
>>> lis = [[0,0,0],[0,0,1],[0,1,0]]
>>> for i in range(1, len(lis)+1):
...     for c in combinations(lis,i):
...         print c
...         
([0, 0, 0],)
([0, 0, 1],)
([0, 1, 0],)
([0, 0, 0], [0, 0, 1])
([0, 0, 0], [0, 1, 0])
([0, 0, 1], [0, 1, 0])
([0, 0, 0], [0, 0, 1], [0, 1, 0])

コメントで @abarnert が指摘したように、これが必要な場合があります。

>>> from pprint import pprint
>>> from itertools import chain
>>> flatten = chain.from_iterable
>>> ans = [list(flatten(c)) for i in range(2, len(lis)+1) for c in permutations(lis,i)]
>>> pprint(ans)
[[0, 0, 0, 0, 0, 1],
 [0, 0, 0, 0, 1, 0],
 [0, 0, 1, 0, 0, 0],
 [0, 0, 1, 0, 1, 0],
 [0, 1, 0, 0, 0, 0],
 [0, 1, 0, 0, 0, 1],
 [0, 0, 0, 0, 0, 1, 0, 1, 0],
 [0, 0, 0, 0, 1, 0, 0, 0, 1],
 [0, 0, 1, 0, 0, 0, 0, 1, 0],
 [0, 0, 1, 0, 1, 0, 0, 0, 0],
 [0, 1, 0, 0, 0, 0, 0, 0, 1],
 [0, 1, 0, 0, 0, 1, 0, 0, 0]]
于 2013-07-10T02:02:30.433 に答える