生成列表的组合,所有列表都具有相同的长度

时间:2016-12-09 23:41:54

标签: python

好的,如果您使用此功能,您将获得列表的可能组合

stuff = [1, 2, 3]
for L in range(0, len(stuff)+1):
    for subset in itertools.combinations(stuff, L):
        print(subset)

结果是

()
(1)
(2)
(3)
(1, 2)
(1, 3)
(2, 3)
(1, 2, 3)

有没有办法改变这一点,结果将是

(0, 0, 0)
(1, 0, 0)
(0, 2, 0)
(0, 0, 3)
(1, 2, 0)
(1, 0, 3)
(0, 2, 3)
(1, 2, 3)

或其他可以执行此操作的代码?

1 个答案:

答案 0 :(得分:6)

如果输出顺序无关紧要,您可以将stuff上的项目转换为长度为2的列表,其中第一个数字为0并使用itertools.product

>>> from itertools import product
>>> stuff = [1, 2, 3]
>>> list(product(*([0, x] for x in stuff)))
[(0, 0, 0), (0, 0, 3), (0, 2, 0), (0, 2, 3), (1, 0, 0), (1, 0, 3), (1, 2, 0), (1, 2, 3)]