Короткий ответ
map(), filter() и reduce() — функции для функциональной обработки коллекций. map() применяет функцию к каждому элементу, filter() отбирает элементы по заданному условию, а reduce() последовательно сводит коллекцию к одному итоговому значению.
Как это работает подробнее
В Python 3 map() и filter() возвращают итераторы, поэтому результат обычно оборачивают в list(), а reduce() вынесена в модуль functools.
- Преобразование.
map(func, iterable)вызывает функцию для каждого элемента и возвращает итератор с результатами; в качестве функции часто передают лямбду. - Фильтрация.
filter(predicate, iterable)оставляет только те элементы, для которых функция-предикат вернула истину. - Свёртка.
reduce(func, iterable)из модуляfunctoolsпоследовательно комбинирует элементы — например, суммирует их или находит максимум за один проход. - Ленивость. Итераторы, возвращаемые
map()иfilter(), вычисляются по требованию, что экономит память при обработке больших последовательностей.
Пример кода
Совместное использование трёх функций
from functools import reduce
numbers = [1, 2, 3, 4]
# map: умножаем каждый элемент на 2
print(list(map(lambda x: x * 2, numbers))) # [2, 4, 6, 8]
# filter: оставляем только чётные
print(list(filter(lambda x: x % 2 == 0, numbers))) # [2, 4]
# reduce: складываем все элементы
print(reduce(lambda x, y: x + y, numbers)) # 10Что использовать на практике
- Comprehensions. Вместо
map()иfilter()чаще используют включения:[x * 2 for x in numbers]и[x for x in numbers if x % 2 == 0]читаются лучше.