Функция reduce() — это мощный инструмент функционального программирования, который позволяет «свернуть» последовательность элементов в одно значение. В отличие от map() и filter(), reduce() живёт не в глобальном пространстве имён, а в модуле functools — и это первое, что нужно запомнить.
Принцип работы простой: берём первые два элемента, применяем к ним функцию, результат объединяем с третьим элементом, снова применяем функцию — и так до конца списка. На выходе получаем одно значение. Классический пример — сумма всех чисел или произведение.
У reduce() есть необязательный третий аргумент — начальное значение (initializer). Если его указать, свёртка начнётся с него, а не с первого элемента списка. Это особенно полезно при работе с пустыми последовательностями.
В этом тренажёре ты научишься импортировать reduce(), понимать порядок применения функции к элементам, использовать lambda-выражения и начальные значения, а также разберёшь типичные ошибки и подводные камни.
- Модуль 1: Основы синтаксиса Python
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Арифметические операторы (+, -, *, /).
- Целочисленное деление и остаток (// и %).
- Возведение в степень (**).
- Операторы сравнения.
- Логические операторы (and, or, not).
- Операторы присваивания (=, +=, -=).
- Операторы принадлежности (in, not in).
- Операторы идентичности (is, is not).
- Битовые операторы.
- Тернарный оператор.
- Модуль 4: Ввод и вывод данных
- Модуль 5: Условные конструкции
- Модуль 6: Циклы
- Модуль 7: Строки
- Модуль 8: Списки
- Модуль 9: Кортежи
- Модуль 10: Словари
- Модуль 11: Множества
- Модуль 12: Функции
- Модуль 13: Встроенные функции
- Функции map() и filter().
- Функция reduce().
- Функция sorted().
- Функции all() и any().
- Модуль 14: Работа с файлами
- Модуль 15: Обработка исключений
- Модуль 16: Модули и пакеты
- Модуль 17: ООП - Основы
- Модуль 18: ООП - Продвинутый уровень
- Модуль 19: Декораторы
- Модуль 20: Генераторы и итераторы
- Модуль 21: Регулярные выражения
- Модуль 22: Дата и время
- Модуль 23: Математические операции
- Модуль 24: Работа с сетью
- Модуль 25: Асинхронное программирование
- Модуль 26: Многопоточность
- Модуль 27: Тестирование
- Модуль 28: Базы данных
- Модуль 29: Алгоритмы и структуры данных
- Модуль 30: Продвинутые возможности
Импорт функции reduce
Функция reduce() не является встроенной — её нужно импортировать из специального модуля. Заполните пропуски, чтобы правильно выполнить импорт.
input1S functools input2S reduceБазовое применение reduce
Проанализируйте код, который использует reduce() для обработки списка чисел. Что будет выведено на экран?
from functools import reduce
numbers = [1, 2, 3, 4]
result = reduce(lambda a, b: a + b, numbers)
print(result)Произведение чисел через reduce
Функция reduce() применяет lambda-выражение, которое перемножает элементы. Введите число, которое выведет этот код.
from functools import reduce
nums = [2, 3, 4, 5]
product = reduce(lambda x, y: x * y, nums)
print(product)Исправьте ошибку импорта
Программист попытался использовать reduce(), но получил ошибку. Найдите и исправьте проблемную строку.
numbers = [1, 2, 3, 4, 5]total = reduce(lambda a, b: a + b, numbers)print(total)Сопоставьте аргументы reduce()
Функция reduce() принимает несколько аргументов. Сопоставьте каждый аргумент с его описанием.
initializerfunctioniterablereduce() с начальным значением
В этом примере reduce() использует третий аргумент — начальное значение (initializer). Что выведет код?
from functools import reduce
nums = [1, 2, 3]
result = reduce(lambda a, b: a + b, nums, 10)
print(result)Найти максимум через reduce
Соберите код, который использует reduce() для поиска максимального значения в списке. Расставьте элементы из банка на свои места.
from functools import reduce
numbers = [3, 7, 2, 9, 4]
max_val = reduce(input1S a, b: a input2S a > b input3S b, numbers)
print(max_val)Классификация: reduce vs другие функции
Распределите выражения по категориям в зависимости от того, какая функция используется для их реализации: reduce(), map() или filter().
Соберите код конкатенации строк
Соберите программу, которая использует reduce() для объединения списка строк ['Hello', ' ', 'World'] в одну строку. Одна строка лишняя.
words = ['Hello', ' ', 'World']from functools import reduceresult = reduce(lambda a, b: a + b, words)print(result)result = reduce(lambda a, b: a * b, words)reduce() с пустым списком и initializer
Что произойдёт, если передать пустой список в reduce() вместе с начальным значением? Введите результат.
from functools import reduce
empty = []
result = reduce(lambda a, b: a + b, empty, 42)
print(result)reduce() с пустым списком без initializer
А что будет, если передать пустой список БЕЗ начального значения? Выберите правильный вариант.
from functools import reduce
empty = []
result = reduce(lambda a, b: a + b, empty)
print(result)Подсчёт вложенных элементов
Используя reduce(), «разверните» список списков в один плоский список. Заполните пропуски в lambda-выражении.
from functools import reduce
nested = [[1, 2], [3, 4], [5, 6]]
flat = reduce(lambda input1S, input2S: input3S + input4S, nested)
print(flat)Порядок вычислений в reduce
Расставьте шаги вычисления reduce(lambda a, b: a - b, [10, 3, 2, 1]) в правильном порядке.
Исправьте lambda-выражение
Код должен находить минимальное значение в списке с помощью reduce(), но содержит ошибку в lambda-выражении. Найдите и исправьте её.
from functools import reducenumbers = [5, 2, 8, 1, 9]min_val = reduce(lambda a, b: a if a > b else b, numbers)print(min_val)Комплексный пример: подсчёт символов
Этот код использует reduce() для подсчёта общего количества символов во всех строках списка. Введите число, которое будет выведено.
from functools import reduce
words = ['cat', 'dog', 'elephant']
total = reduce(lambda acc, word: acc + len(word), words, 0)
print(total)