Функция reduce()

Тренажер по Python для пользователей с начальным уровнем подготовки.

Тренажер по Python

Функция reduce() — это мощный инструмент функционального программирования, который позволяет «свернуть» последовательность элементов в одно значение. В отличие от map() и filter(), reduce() живёт не в глобальном пространстве имён, а в модуле functools — и это первое, что нужно запомнить.

Принцип работы простой: берём первые два элемента, применяем к ним функцию, результат объединяем с третьим элементом, снова применяем функцию — и так до конца списка. На выходе получаем одно значение. Классический пример — сумма всех чисел или произведение.

У reduce() есть необязательный третий аргумент — начальное значение (initializer). Если его указать, свёртка начнётся с него, а не с первого элемента списка. Это особенно полезно при работе с пустыми последовательностями.

В этом тренажёре ты научишься импортировать reduce(), понимать порядок применения функции к элементам, использовать lambda-выражения и начальные значения, а также разберёшь типичные ошибки и подводные камни.

Список тем

Импорт функции reduce

id: 40049_task1

Функция reduce() не является встроенной — её нужно импортировать из специального модуля. Заполните пропуски, чтобы правильно выполнить импорт.

Заполните пропуски
input1S functools input2S reduce
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Базовое применение reduce

id: 40049_task2

Проанализируйте код, который использует reduce() для обработки списка чисел. Что будет выведено на экран?

Выберите правильный вариант ответа
from functools import reduce

numbers = [1, 2, 3, 4]
result = reduce(lambda a, b: a + b, numbers)
print(result)
Сообщения
Проверить
Показать подсказку

Произведение чисел через reduce

id: 40049_task3

Функция reduce() применяет lambda-выражение, которое перемножает элементы. Введите число, которое выведет этот код.

Что должно получиться?
from functools import reduce

nums = [2, 3, 4, 5]
product = reduce(lambda x, y: x * y, nums)
print(product)
Сообщения
Проверить
Показать подсказку

Исправьте ошибку импорта

id: 40049_task4

Программист попытался использовать reduce(), но получил ошибку. Найдите и исправьте проблемную строку.

Найдите ошибку и исправьте
numbers = [1, 2, 3, 4, 5]
total = reduce(lambda a, b: a + b, numbers)
print(total)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сопоставьте аргументы reduce()

id: 40049_task5

Функция reduce() принимает несколько аргументов. Сопоставьте каждый аргумент с его описанием.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Функция, принимающая два аргумента и возвращающая результат
Последовательность элементов для обработки
Необязательное начальное значение для свёртки
initializer
function
iterable
Сообщения
Проверить
Показать подсказку

reduce() с начальным значением

id: 40049_task6

В этом примере reduce() использует третий аргумент — начальное значение (initializer). Что выведет код?

Выберите правильный вариант ответа
from functools import reduce

nums = [1, 2, 3]
result = reduce(lambda a, b: a + b, nums, 10)
print(result)
Сообщения
Проверить
Показать подсказку

Найти максимум через reduce

id: 40049_task7

Соберите код, который использует 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)
lambda
if
else
def
>
<
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Классификация: reduce vs другие функции

id: 40049_task8

Распределите выражения по категориям в зависимости от того, какая функция используется для их реализации: reduce(), map() или filter().

Перетяните элементы в соответствующие блоки
reduce()
map()
filter()
Получить сумму всех чисел списка
Возвести каждый элемент в квадрат
Оставить только положительные числа
Найти произведение всех элементов
Преобразовать строки в верхний регистр
Отфильтровать чётные числа
Сообщения
Проверить
Показать подсказку

Соберите код конкатенации строк

id: 40049_task9

Соберите программу, которая использует reduce() для объединения списка строк ['Hello', ' ', 'World'] в одну строку. Одна строка лишняя.

Перетяните в правильном порядке строки из одного блока в другой
words = ['Hello', ' ', 'World']
from functools import reduce
result = reduce(lambda a, b: a + b, words)
print(result)
result = reduce(lambda a, b: a * b, words)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

reduce() с пустым списком и initializer

id: 40049_task10

Что произойдёт, если передать пустой список в reduce() вместе с начальным значением? Введите результат.

Что должно получиться?
from functools import reduce

empty = []
result = reduce(lambda a, b: a + b, empty, 42)
print(result)
Сообщения
Проверить
Показать подсказку

reduce() с пустым списком без initializer

id: 40049_task11

А что будет, если передать пустой список БЕЗ начального значения? Выберите правильный вариант.

Выберите правильный вариант ответа
from functools import reduce

empty = []
result = reduce(lambda a, b: a + b, empty)
print(result)
Сообщения
Проверить
Показать подсказку

Подсчёт вложенных элементов

id: 40049_task12

Используя reduce(), «разверните» список списков в один плоский список. Заполните пропуски в lambda-выражении.

Заполните пропуски
from functools import reduce

nested = [[1, 2], [3, 4], [5, 6]]
flat = reduce(lambda input1S, input2S: input3S + input4S, nested)
print(flat)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Порядок вычислений в reduce

id: 40049_task13

Расставьте шаги вычисления reduce(lambda a, b: a - b, [10, 3, 2, 1]) в правильном порядке.

Расставьте строки в правильном порядке
Шаг 3: 5 - 1 = 4 (итоговый результат)
Шаг 1: 10 - 3 = 7
Начало: берём первые элементы 10 и 3
Шаг 2: 7 - 2 = 5
Сообщения
Проверить
Показать подсказку

Исправьте lambda-выражение

id: 40049_task14

Код должен находить минимальное значение в списке с помощью reduce(), но содержит ошибку в lambda-выражении. Найдите и исправьте её.

Найдите ошибку и исправьте
from functools import reduce
numbers = [5, 2, 8, 1, 9]
min_val = reduce(lambda a, b: a if a > b else b, numbers)
print(min_val)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Комплексный пример: подсчёт символов

id: 40049_task15

Этот код использует reduce() для подсчёта общего количества символов во всех строках списка. Введите число, которое будет выведено.

Что должно получиться?
from functools import reduce

words = ['cat', 'dog', 'elephant']
total = reduce(lambda acc, word: acc + len(word), words, 0)
print(total)
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру