Генератор, имитирующий работу функции map

Итерируйтесь по входу и выдавайте function(item) через yield. Результат вычисляется лениво, как у map для одного iterable.

Короткий ответ

Что ответить на собеседовании

Итерируйтесь по входу и выдавайте function(item) через yield. Результат вычисляется лениво, как у map для одного iterable.

Подробный разбор

Ответ с пояснениями

Условие

Реализуйте генератор, который воспроизводит поведение встроенной функции map, применяя переданную функцию к каждому элементу указанного итерируемого объекта.

Пример 1: Ввод: res = my_map(lambda x: x * 2, [1, 2, 3]) Вывод: [2, 4, 6]

Ответ

Итерируйтесь по входу и выдавайте function(item) через yield. Результат вычисляется лениво, как у map для одного iterable.

def my_map(function, iterable):
    for item in iterable:
        yield function(item)

result = my_map(lambda x: x * 2, [1, 2, 3])
assert list(result) == [2, 4, 6]

Функция вызывается только при продвижении генератора. Пустой вход не даёт элементов, а исключение преобразования распространяется потребителю. Генератор одноразовый и не поддерживает индексирование.

Встроенный map также умеет принимать несколько итерируемых объектов, но это не требуется приведённым условием. Для такого расширения можно обходить zip(*iterables) и вызывать function(*items), завершаясь на кратчайшем входе.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее