Функции map() и filter()

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

Тренажер по Python

Функции map() и filter() — это два мощных инструмента функционального программирования в Python. Они позволяют обрабатывать коллекции данных без явных циклов, делая код компактнее и выразительнее.

map() берёт функцию и применяет её к каждому элементу последовательности. Например, если нужно возвести все числа в квадрат — map() справится с этим в одну строку.

filter() работает иначе: она тоже принимает функцию, но использует её как фильтр. Функция должна возвращать True или False, и в результат попадают только те элементы, для которых получили True.

Обе функции возвращают не список, а специальные объекты-итераторы. Чтобы увидеть результат, их обычно оборачивают в list(). Это может показаться неудобным, но на самом деле экономит память при работе с большими данными.

В этом тренажёре ты научишься применять map() и filter() в разных ситуациях: от простого преобразования чисел до комбинирования обеих функций вместе.

Список тем

Сопоставь функцию и её назначение

id: 40048_task1

Перед тобой описания двух встроенных функций Python. Сопоставь каждое описание с соответствующей функцией из правого столбца.

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

Базовый синтаксис map()

id: 40048_task2

Допиши код так, чтобы функция map() применила встроенную функцию str() к каждому числу в списке, превратив числа в строки.

Заполните пропуски
numbers = [1, 2, 3, 4, 5]
result = input1S(input2S, input3S)
print(list(result))
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Что вернёт map() с функцией len?

id: 40048_task3

Изучи код. Функция map() применяет len() к каждому элементу списка слов. Что будет выведено на экран?

Выберите правильный вариант ответа
words = ["cat", "elephant", "dog"]
lengths = map(len, words)
print(list(lengths))
Сообщения
Проверить
Показать подсказку

Базовый синтаксис filter()

id: 40048_task4

Допиши код, чтобы filter() оставила только положительные числа из списка. Используй lambda-функцию для проверки условия.

Заполните пропуски
numbers = [-2, -1, 0, 1, 2, 3]
positive = input1S(input2S, numbers)
print(list(positive))
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Фильтрация строк по длине

id: 40048_task5

Функция filter() отбирает слова, длина которых больше 4 символов. Какой результат будет выведен?

Выберите правильный вариант ответа
words = ["hi", "hello", "world", "ok"]
long_words = filter(lambda w: len(w) > 4, words)
print(list(long_words))
Сообщения
Проверить
Показать подсказку

Исправь ошибку в вызове map()

id: 40048_task6

Код должен возвести каждое число в квадрат, но содержит ошибку. Найди и исправь строку с ошибкой.

Найдите ошибку и исправьте
numbers = [1, 2, 3, 4]
squared = map(lambda x: x**2(), numbers)
print(list(squared))
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Распредели выражения по функциям

id: 40048_task7

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

Перетяните элементы в соответствующие блоки
Задачи для map()
Задачи для filter()
Преобразовать список чисел в строки
Оставить только чётные числа
Возвести все числа в куб
Убрать пустые строки из списка
Получить длины всех слов
Оставить числа больше 100
Сообщения
Проверить
Показать подсказку

Собери код: удвоение чисел

id: 40048_task8

Собери работающий код, который использует map() для удвоения каждого числа в списке и выводит результат. Одна строка лишняя.

Перетяните в правильном порядке строки из одного блока в другой
doubled = map(lambda x: x * 2, nums)
print(list(doubled))
nums = [5, 10, 15]
doubled = filter(lambda x: x * 2, nums)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Вычисли результат map() с abs()

id: 40048_task9

Функция abs() возвращает абсолютное значение числа (модуль). Что выведет этот код? Введи ответ в формате списка, например: [1, 2, 3]

Что должно получиться?
numbers = [-3, 0, 4, -7]
result = list(map(abs, numbers))
print(result)
Сообщения
Проверить
Показать подсказку

Исправь ошибку в filter()

id: 40048_task10

Код должен отфильтровать числа, оставив только те, что делятся на 3 без остатка. Но что-то пошло не так. Найди и исправь ошибку.

Найдите ошибку и исправьте
numbers = [1, 3, 6, 7, 9, 12]
divisible = filter(lambda x: x / 3 == 0, numbers)
print(list(divisible))
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Собери код из банка токенов

id: 40048_task11

Используя токены из банка, собери код, который отфильтрует список, оставив только непустые строки. Некоторые токены лишние.

Нужно правильно расставить в пропуски предложенные варианты
texts = ["hello", "", "world", "", "python"]
non_empty = input1S(input2S, input3S)
print(list(non_empty))
filter
map
bool
len
texts
numbers
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Комбинация map() и filter()

id: 40048_task12

Код сначала фильтрует чётные числа, а потом возводит их в квадрат. Что будет выведено?

Выберите правильный вариант ответа
numbers = [1, 2, 3, 4, 5]
evens = filter(lambda x: x % 2 == 0, numbers)
squared = map(lambda x: x ** 2, evens)
print(list(squared))
Сообщения
Проверить
Показать подсказку

Восстанови порядок: обработка данных

id: 40048_task13

Расставь строки в правиль��ом порядке, чтобы код: 1) создал список цен, 2) отфильтровал цены больше 50, 3) применил скидку 10% к отфильтрованным, 4) вывел результат.

Расставьте строки в правильном порядке
expensive = filter(lambda p: p > 50, prices)
discounted = map(lambda p: p * 0.9, expensive)
print(list(discounted))
prices = [30, 75, 50, 120, 45]
Сообщения
Проверить
Показать подсказку

filter() с None вместо функции

id: 40048_task14

Если передать None вместо функции в filter(), она отбросит все "ложные" значения (0, None, False, пустые строки). Что выведет код? Введи ответ в формате списка.

Что должно получиться?
data = [0, 1, "", "hi", None, 42, False]
truthy = list(filter(None, data))
print(truthy)
Сообщения
Проверить
Показать подсказку

Собери: преобразование словаря

id: 40048_task15

Собери код, который извлечёт все цены из списка словарей и увеличит каждую на 20%. Две строки лишние.

Перетяните в правильном порядке строки из одного блока в другой
prices = map(lambda p: p['price'], products)
increased = map(lambda x: x * 1.2, prices)
products = [{'name': 'A', 'price': 100}, {'name': 'B', 'price': 200}]
print(list(increased))
prices = filter(lambda p: p['price'], products)
increased = map(lambda x: x + 1.2, prices)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру