两个列表的交替产品

时间:2017-08-25 21:29:56

标签: python-2.x

如果我将itertools.product与两个列表一起使用,则嵌套的for循环等效项将始终首先循环第二个列表:

>>> from itertools import product
>>> list(product([1,2,3], [4,5,6]))
[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]

但是对于某些用例,我可能希望这些命令是交替的,就像弹出每个列表中的第一个项目一样,而不是实际弹出它们。假设函数首先给出[1,4],然后[2,4](1弹出),然后[2,5](4弹出),然后[3,5],最后[3,6]

>>> list(hypothetical([1,2,3], [4,5,6]))
[(1, 4), (2, 4), (2, 5), (3, 5), (3, 6)]

我能想到的唯一方法是在for循环中产生一个“从下一个弹出的列表”标志。

是否有内置或库方法可以执行此操作?我必须自己写吗?

1 个答案:

答案 0 :(得分:1)

import itertools

L1 = [1, 2, 3]
L2 = [4, 5, 6]

print list(zip(itertools.islice((e for e in L1 for x in (1, 2)), 1, None), (e for e in L2 for x in (1, 2))))