假设我有一个n个元素的列表,每个元素由0个或更多整数的列表组成,我希望得到所有可能的组合。
这是我的清单:
[[0], [1, 6], [2, 3], [2, 3], [], [4]]
这是预期的输出:
[0, 1, 2, 2, 4]
[0, 1, 3, 2, 4]
...
[0, 6, 3, 3, 4]
应保留列表顺序。这是任何组合都应该从0开始。
答案 0 :(得分:1)
您正在寻找列表的产品;使用itertools.product()
,但首先过滤掉空列表:
from itertools import product
for combo in product(*filter(None, yourlist)):
print(combo)
filter(None, ...)
删除所有空元素。
演示:
>>> from itertools import product
>>> yourlist = [[0], [1, 6], [2, 3], [2, 3], [], [4]]
>>> for combo in product(*filter(None, yourlist)):
... print(combo)
...
(0, 1, 2, 2, 4)
(0, 1, 2, 3, 4)
(0, 1, 3, 2, 4)
(0, 1, 3, 3, 4)
(0, 6, 2, 2, 4)
(0, 6, 2, 3, 4)
(0, 6, 3, 2, 4)
(0, 6, 3, 3, 4)
答案 1 :(得分:0)
丢弃任何空列表,然后应用itertools.product
。
>>> from itertools import product
>>> lst = [[0], [1, 6], [2, 3], [2, 3], [], [4]]
>>> list(product(*[x for x in lst if x]))
[(0, 1, 2, 2, 4), (0, 1, 2, 3, 4), (0, 1, 3, 2, 4), (0, 1, 3, 3, 4), (0, 6, 2, 2, 4), (0, 6, 2, 3, 4), (0, 6, 3, 2, 4), (0, 6, 3, 3, 4)]
itertools.product将为给定的iterables计算cartesian product。如果您提供的可迭代项是有序的(对于您的列表就是这种情况),product
创建的元组也将反映该顺序。