Есть ли в Python встроенный или стандартный механизм просмотра итераторов? - PullRequest
0 голосов
/ 05 марта 2019

В принципе, достаточно легко написать оболочку для итераторов, которая допускает произвольный просмотр, и некоторые вопросы были посвящены этому (например, Использование просмотра с генераторами ).

Однако, учитывая, что почти каждый нетривиальный синтаксический анализ файлов выиграл бы от такой возможности, это кажется слишком очевидным упущением для стандартной библиотеки; Неужели нет механизма встроенного или стандартной библиотеки , который позволял бы заглядывать?

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

В некоторых случаях collections.deque или itertools.tee могут использоваться для создания обходных путей. Ради читабельности кода они, однако, неблагоприятны.

1 Ответ

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

Нет.


Я часто использую рецепт pairwise , чтобы смотреть вперед ...

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b)

for item, peek in pairwise(iterable):
    ...

Или просто превращаю вашу итерацию впоследовательность (если это еще не сделано) и используйте индексированные поиски.

for index, item in enumerate(sequence):
    try:
        peek = sequence[index+1]
    except IndexError:
        peek = None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...