Как предусмотреть один элемент (быстрый взгляд) в генераторе Python?

Я не могу выяснить, как предусмотреть один элемент в генераторе Python. Как только я смотрю, это пошло.

Вот то, что я имею в виду:

gen = iter([1,2,3])
next_value = gen.next()  # okay, I looked forward and see that next_value = 1
# but now:
list(gen)  # is [2, 3]  -- the first value is gone!

Вот более реальный пример:

gen = element_generator()
if gen.next_value() == 'STOP':
  quit_application()
else:
  process(gen.next())

Кто-либо может помочь мне записать генератор, что можно посмотреть один элемент вперед?

67
задан smci 4 April 2019 в 23:40
поделиться

2 ответа

API-интерфейс генератора Python является одним из способов: вы не можете вернуть элементы, которые прочитали. Но вы можете создать новый итератор с помощью модуля itertools и добавить элемент:

import itertools

gen = iter([1,2,3])
peek = gen.next()
print list(itertools.chain([peek], gen))
54
ответ дан 24 November 2019 в 14:27
поделиться

Это будет работать - он буферизует элемент и вызывает функцию с каждым элементом и следующим элементом в последовательности.

Ваши требования неясны относительно того, что происходит в конце последовательности. Что означает «смотреть вперед», когда вы находитесь на последнем этапе?

def process_with_lookahead( iterable, aFunction ):
    prev= iterable.next()
    for item in iterable:
        aFunction( prev, item )
        prev= item
    aFunction( item, None )

def someLookaheadFunction( item, next_item ):
    print item, next_item
3
ответ дан 24 November 2019 в 14:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: