все Python 3functoolsпонятие
functools.reduce
сворачивание
Сворачивает итерируемое применяя функцию накопительно слева направо. Необязательный initial — начальное значение.
Синтаксис
functools.reduce(function, iterable, /[, initial])
Без initial reduce на пустом итерируемом падает с TypeError, а на одноэлементном возвращает этот элемент, ни разу не вызвав функцию — почти всегда стоит передавать начальное значение явно. В Python 3 reduce намеренно убрали из встроенных: обычный цикл или готовые sum(), math.prod(), str.join() читаются лучше, а накопление списков или строк через reduce ещё и квадратично по времени.
Примеры
from functools import reduce
result = reduce(lambda a, b: a + b, [1,2,3,4,5])
print(result) # → 15
product = reduce(lambda a, b: a * b, [1,2,3,4,5])
print(product) # → 120
maximum = reduce(lambda a, b: a if a > b else b, [3,1,4,1,5,9])
print(maximum) # → 9
words = ['Hello', ' ', 'World']
sentence = reduce(lambda a, b: a + b, words)
print(sentence) # → Hello World
from functools import reduce
# С начальным значением
total = reduce(lambda a, b: a + b, [1,2,3], 100)
print(total) # → 106
from functools import reduce
# Подсчёт вхождений
from collections import Counter
nums = [1,1,2,3,1]
result2 = reduce(lambda acc, x: acc + (1 if x==1 else 0), nums, 0)
print(result2) # → 3
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности