Скажем, мы хотим обработать итератор и хотим обрабатывать его кусками.
Логика на кусок зависит от ранее вычисленных кусков, поэтому groupby()
не помогает.
Наш друг в этом случае is itoolools.takewhile():
while True:
chunk = itertools.takewhile(getNewChunkLogic(), myIterator)
process(chunk)
Проблема заключается в том, что takewhile()
нужно пройти мимо последнего элемента, который соответствует новой логике блоков, таким образом "съедая" первый элемент для следующего фрагмента.
Существуют различные решения, включая упаковку или à la C ungetc()
и т.д.
Мой вопрос: есть ли элегантное решение?