走两个列表(没有拉链)

时间:2014-08-08 07:48:35

标签: python

这是我的实施:

def walk_two(a, b):
    for x in a:
        for y in b:
            yield x, y

a = xrange(2)
b = xrange(3)

for x, y in walk_two(a, b):
    print x, y

使用此输出:

0 0
0 1
0 2
1 0
1 1
1 2

有更好的(更加pythonic)方式吗?一个内置的?更通用的walkN?

4 个答案:

答案 0 :(得分:7)

您正在寻找itertools.product

from itertools import product
a = xrange(2)
b = xrange(3)

for x, y in product(a, b):
    print x, y

答案 1 :(得分:3)

itertools.product做你想要的,并且可以扩展到更多的列表:

https://docs.python.org/2/library/itertools.html#itertools.product

import itertools
a = xrange(2)
b = xrange(3)

for x, y in itertools.product(a, b):
    print x, y

输出:

0 0
0 1
0 2
1 0
1 1
1 2

答案 2 :(得分:1)

答案 3 :(得分:0)

我认为这个稍好一点:

>>> for a in xrange(2):
...   for b in xrange(3):
...     print a, b
... 
0 0
0 1
0 2
1 0
1 1
1 2

您不需要在此处使用生成器,因为您正在使用xrange()函数。该函数返回xrange对象而不是列表。

>>> a = xrange(10)
>>> a
xrange(10)
>>>