我试图使用生成器产生两个数组的组合,但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) )
每次调用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
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)