Python Glossary English

все 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Сообщить о неточности