Python: следующий цикл - PullRequest
       21

Python: следующий цикл

9 голосов
/ 07 апреля 2019

Я хочу использовать next, чтобы пропустить один или несколько элементов, возвращаемых из генератора. Вот упрощенный пример, предназначенный для пропуска одного элемента в цикле (при фактическом использовании я бы протестировал n и, в зависимости от результата, мог бы повторить next(), а генератор получен из пакета, который я не контролирую):

def gen():
for i in range(10):
    yield i

for g in gen():
   n = next(gen())
   print(g, n)

Я ожидал, что результат будет

0 1
2 3

и т.д.

Вместо этого я получил

0 0
1 0

и т.д.

Что я делаю не так?

1 Ответ

9 голосов
/ 07 апреля 2019

Вы создаете новый генератор каждый раз, когда звоните gen(). Каждый новый генератор начинается с 0.

Вместо этого вы можете вызвать его один раз и получить возвращаемое значение.

def gen():
    for i in range(10):
        yield i

x = gen()
for g in x:
    n = next(x)
    print(g, n)
...