Python 2.x 两个列表的交替乘积

Python 2.x 两个列表的交替乘积,python-2.x,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)] 但对于某些用例,我可能希望这些顺序是交替的,就像从每个列表中弹出第一个

如果我使用带有两个列表的
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循环中让步


是否有一个内置或库方法可以做到这一点?我必须自己写吗?

所以。。。那么是部分产品吗?@IgnacioVazquez Abrams我不知道正确的名字:(只是在谷歌上搜索“部分产品”尽管如此。看起来部分积不适用于列表。嗯,你看起来不想要产品的所有结果,只是其中的一部分。是的。应该有一个库函数,对吗?itertools中没有这样的东西。谢谢!看起来代码将两个列表的长度加倍,移动第一个(或第二个?)一个接一个,然后拉上拉链。对吗?是的,一个接一个。很难理解,但很聪明。谢谢!
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))))