关于list:python中的成对交叉产品

Pairwise crossproduct in Python

本问题已经有最佳答案,请猛点这里访问。

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

例子

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

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


如果您使用的是(至少)python2.6,那么您需要itertools.product。

1
2
3
4
5
6
7
>>> 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
[(x, y) for x in a for y in b]

但是,如果您只是通过使用生成器来循环这些内容,则可以避免列表的开销:

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

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


使用生成器不需要ITertools,只需:

1
2
3
4
gen = ((x, y) for x in a for y in b)

for u, v in gen:
    print u, v