Python Glossary English

Python 3.2+Итераторы и генераторыпонятие

itertools.accumulate

itertools

Накапливающиеся промежуточные результаты применения функции. По умолчанию — сумма.

Синтаксис

from itertools import accumulate
accumulate(iterable, func=operator.add)

Отличие от functools.reduce: reduce сворачивает всё в одно число, accumulate отдаёт всю историю свёртки — на выходе столько же элементов, сколько на входе. Результат ленивый итератор, а не список: печатать его напрямую бесполезно, нужен list() или обход циклом, и пройти по нему можно один раз. Функция должна принимать два аргумента; параметр initial (с Python 3.8) подставляет стартовое значение и делает выход на один элемент длиннее.

Примеры

from itertools import accumulate
print(list(accumulate([1,2,3,4,5])))  # → [1,3,6,10,15] (накопленные суммы)
from itertools import accumulate
import operator
print(list(accumulate([1,2,3,4,5], operator.mul)))  # → [1,2,6,24,120] (факториалы)
from itertools import accumulate
# running max
print(list(accumulate([3,1,4,1,5,9,2,6], max)))  # → [3,3,4,4,5,9,9,9]
from itertools import accumulate
# С начальным значением (Python 3.8+)
print(list(accumulate([1,2,3], initial=100)))  # → [100,101,103,106]
from itertools import accumulate
# Применение в финансах (баланс счёта)
transactions = [1000, -200, -50, 300, -100]
balances = list(accumulate(transactions))
print(balances)  # → [1000,800,750,1050,950]

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности