Есть ли способ получить все комбинации двух массивов один за другим, используя функцию генератора? - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь получить комбинации из двух массивов с использованием генератора, но значения 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 ]

1 голос
/ 29 марта 2019

Вы создаете новый генератор каждый раз, когда вызываете 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
0 голосов
/ 29 марта 2019

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...