如何从Python中的任意长列表列表中获取交叉产品对的列表?
a = [1, 2, 3]
b = [4, 5, 6]
crossproduct(a,b)
应该产生[[1, 4], [1, 5], [1, 6], ...]
。
答案 0 :(得分:126)
如果您(至少)使用Python 2.6,那么您正在寻找itertools.product。
>>> import itertools
>>> a=[1,2,3]
>>> b=[4,5,6]
>>> itertools.product(a,b)
<itertools.product object at 0x10049b870>
>>> list(itertools.product(a,b))
[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
答案 1 :(得分:76)
因为你要了一个清单:
[(x, y) for x in a for y in b]
但如果您只是通过使用生成器来循环遍历列表,则可以避免列表的开销:
((x, y) for x in a for y in b)
在for
循环中表现相同,但不会导致list
的创建。
答案 2 :(得分:13)
使用生成器不需要itertools,只需:
gen = ((x, y) for x in a for y in b)
for u, v in gen:
print u, v