有没有一种方法可以使用生成器函数一一生成两个数组的所有组合?

时间:2019-03-29 14:40:57

标签: python loops for-loop yield

我正在尝试使用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)

2 个答案:

答案 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)