Что такое функция map в контексте программирования?

«Что такое функция map в контексте программирования?» — вопрос из категории Алгоритмы и структуры данных, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

map — это функция высшего порядка, которая применяет заданную функцию-трансформатор к каждому элементу входной коллекции (итерируемого объекта) и возвращает итератор с результатами. Это фундаментальная операция в функциональном программировании для преобразования данных без использования явных циклов for.

Синтаксис (на примере Python):

map(function, iterable, ...)

Примеры использования:

  1. С анонимной функцией (lambda):
    numbers = [1, 2, 3, 4]
    squared_iterator = map(lambda x: x ** 2, numbers)
    print(list(squared_iterator))  # [1, 4, 9, 16]
  2. Со встроенной функцией:
    str_numbers = ["1", "2", "3"]
    int_numbers = list(map(int, str_numbers))  # Преобразование строк в целые числа
    print(int_numbers)  # [1, 2, 3]
  3. С несколькими итерируемыми объектами:
    a = [1, 2, 3]
    b = [10, 20, 30]
    sums = list(map(lambda x, y: x + y, a, b))
    print(sums)  # [11, 22, 33]

Важные особенности:

  • Ленивые вычисления: map возвращает итератор, а не список. Элементы вычисляются по мере необходимости (при итерации), что экономит память. Для получения списка требуется явное преобразование list().
  • Альтернатива — списковые включения (list comprehensions): В Python для простых преобразований часто используется более питонический синтаксис: [x**2 for x in numbers]. map может быть эффективнее с уже существующими функциями (например, int, str.upper).
  • Аналоги в других языках: Концепция map присутствует практически во всех современных языках (JavaScript: Array.map(), Java: Stream.map(), C#: Select() в LINQ).

Видео-ответы