在Python3中获取所有可能的案例

时间:2016-04-18 07:17:59

标签: python python-3.5

假设我有一个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开始。

2 个答案:

答案 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创建的元组也将反映该顺序。