Python 中的成对交叉积

在 Python 中,如何从任意长的列表中获取交叉产品 成对的列表?

例子

a = [1, 2, 3]
b = [4, 5, 6]

crossproduct(a,b)应该产生 [[1, 4], [1, 5], [1, 6], ...]

103043 次浏览

如果您使用(至少) 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)]

既然你问我要名单:

[(x, y) for x in a for y in b]

但是,如果您只是使用生成器来循环访问这些列表,那么您可以避免列表的开销:

((x, y) for x in a for y in b)

for循环中的行为完全相同,但不会导致 list的创建。

使用生成器不需要迭代工具,简单来说:

gen = ((x, y) for x in a for y in b)


for u, v in gen:
print u, v