我正在尝试使用a产生两个数组的组合 generator,但i,j值保持不变。
array1 = [1,2,3,4]
array2 = [4,5]
def testyield():
global array1
global array2
for i in range (0,len(array1)):
for j in range (0,len(array2)):
yield array1[i],array2[j]
print next(testyield())
print next(testyield())
print next(testyield())
print next(testyield())
我期望输出(1,4)(1,5)(2,4)(2,5),但实际输出是(1,4)(1,4)(1,4)( 1,4)
答案 0 :(得分:1)
每次调用testyield()
您必须做的是将其分配给变量,然后在生成器上调用next
:
my_gen = testyield()
print next(my_gen) # (1, 4)
print next(my_gen) # (1, 5)
print next(my_gen) # (2, 4)
print next(my_gen) # (2, 5)
正如其他人所说,如果您的目标是编写良好的代码,请看一下itertools.product
,它可以直接回答您的问题:
from itertools import product
for e in product(array1, array2):
print e
答案 1 :(得分:0)
itertools.product()
可能正是您想要的。它返回一个生成器:
import itertools
array1 = [1,2,3,4]
array2 = [4,5]
for x in itertools.product(array1, array2):
print(x)
# (1, 4)
# (1, 5)
# (2, 4)
# (2, 5)
# (3, 4)
# (3, 5)
# (4, 4)
# (4, 5)
但是要使代码正常工作,请按以下方式使用它:
for x in testyield():
print(x)