Документация itertools
имеет рецепт для этого, называемый pairwise
.Вы можете скопировать и вставить функцию или импортировать ее из more_itertools
(который необходимо установить).
Демо:
>>> from more_itertools import pairwise
>>>
>>> x = [1,2,3,4,5,6,7,5,4,3]
>>> x[0] + sum(m for n, m in pairwise(x) if n != 5)
30
edit:
Но что, если моя структура данных является итеративной, но не поддерживает индексирование?
В этом случае вышеуказанное решение нуждается в незначительной модификации.
>>> from itertools import tee
>>> from more_itertools import pairwise
>>>
>>> x = (n for n in [1,2,3,4,5,6,7,5,4,3]) # generator, no indices!
>>> it1, it2 = tee(x)
>>> next(it1, 0) + sum(m for n, m in pairwise(it2) if n != 5)
30