我有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个组合(例如),如下所示:
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种组合)?
答案 0 :(得分:2)
使用range(1, len(lis)+1)
获取传递给r
的第二个参数(combinations
)的值。如果您想从2开始,请range(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]]