逐渐将一个列表与另一个列表交织

时间:2019-04-01 08:03:00

标签: python python-3.x iteration combinations

我试图逐渐使一个列表与另一个列表交织。我的意思是:从列表开始

a0 = list(range(3))      # [0, 1, 2]
a1 = list(range(10, 13)) # [10, 11, 12]

我希望能够迭代组合

[0, 1, 2]
[10, 1, 2]
[0, 11, 2]
[10, 11, 2]
[0, 1, 12]
[10, 1, 12]
[0, 11, 12]
[10, 11, 12]

首先将a0的任何元素都不替换为a1的相应元素,然后依次是一个,然后两个和所有元素。

到目前为止,我想出了什么:

a01 = list(zip(a0, a1))

for i in range(1<<len(a0)):
    print(list(item[(i >> j) & 1] for j, item in enumerate(a01)))

zip一起列出列表,并使用i作为标志,告诉我从哪个列表中选择元素。

这似乎很不雅致。还有更优雅的东西吗?我觉得itertools提供了可以在此处使用的功能,但到目前为止我还不清楚。


此处duplicate中的建议是:

from itertools import product

for item in product(*zip(a0, a1)):
    print(item)

这将产生期望的结果(以不同的顺序)。

要获得正确的订单meowgoesthedog,请在注释中提出建议:

list(map(lambda x: tuple(reversed(x)), product(*reversed(list(zip(a0, a1))))))

这回答了问题。

0 个答案:

没有答案