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