这是我的实施:
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?
答案 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)
>>>