← Назад к вопросам

Что такое функция map в Python?

1.3 Junior🔥 101 комментариев
#Python

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Функция map в Python

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

Синтаксис и основное использование

map(function, iterable)
  • function — функция, которую нужно применить к каждому элементу
  • iterable — итерируемый объект (список, кортеж и т.д.)
  • Возврат — объект map (итератор), который нужно преобразовать в список

Простые примеры

1. Преобразование строк в числа

# Преобразование список строк в список чисел
strings = ["1", "2", "3", "4", "5"]
numbers = list(map(int, strings))
print(numbers)  # [1, 2, 3, 4, 5]

# Аналогично с помощью list comprehension
numbers = [int(x) for x in strings]

2. Преобразование с помощью функции

def square(x):
    return x ** 2

numbers = [1, 2, 3, 4, 5]
squared = list(map(square, numbers))
print(squared)  # [1, 4, 9, 16, 25]

3. Использование lambda функций

numbers = [1, 2, 3, 4, 5]
doubled = list(map(lambda x: x * 2, numbers))
print(doubled)  # [2, 4, 6, 8, 10]

# Со строками
names = ["john", "alice", "bob"]
capitalized = list(map(lambda x: x.capitalize(), names))
print(capitalized)  # ['John', 'Alice', 'Bob']

map с несколькими итераторами

# map может применяться к нескольким последовательностям одновременно
list1 = [1, 2, 3, 4]
list2 = [10, 20, 30, 40]

result = list(map(lambda x, y: x + y, list1, list2))
print(result)  # [11, 22, 33, 44]

# Более сложный пример
def multiply(x, y):
    return x * y

result = list(map(multiply, list1, list2))
print(result)  # [10, 40, 90, 160]

map в Data Engineering

1. Обработка больших наборов данных

import csv
from typing import List, Dict

def parse_record(line: str) -> Dict:
    parts = line.split(",")
    return {
        "id": int(parts[0]),
        "name": parts[1].strip(),
        "value": float(parts[2])
    }

# Загрузка CSV и трансформация
with open("data.csv") as f:
    records = list(map(parse_record, f))

2. Преобразование типов данных

# Конвертация JSON строк в объекты
import json

json_strings = [
    '{"id": 1, "name": "Alice"}',
    '{"id": 2, "name": "Bob"}',
    '{"id": 3, "name": "Charlie"}'
]

users = list(map(json.loads, json_strings))
print(users)  # [{'id': 1, 'name': 'Alice'}, ...]

3. Масштабирование с помощью map

from multiprocessing import Pool

def process_chunk(data_chunk):
    # Дорогостоящая операция
    return sum(data_chunk)

# Параллельная обработка данных
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
with Pool(4) as pool:
    results = list(pool.map(process_chunk, data))
print(results)  # [6, 15, 24]

map vs list comprehension

# map — функциональный стиль
numbers = [1, 2, 3, 4, 5]
squared_map = list(map(lambda x: x ** 2, numbers))

# list comprehension — более pythonic и читаем
squared_comp = [x ** 2 for x in numbers]

# list comprehension часто предпочтительнее, так как:
# 1. Более читаем
# 2. Не требует lambda
# 3. Позволяет легче добавить условия
filtered_squared = [x ** 2 for x in numbers if x > 2]

# С map это был бы filter + map
filtered_squared_map = list(map(lambda x: x ** 2, filter(lambda x: x > 2, numbers)))

map с filter

# Фильтрация и трансформация
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Четные числа, возведенные в квадрат
result = list(map(lambda x: x ** 2, filter(lambda x: x % 2 == 0, numbers)))
print(result)  # [4, 16, 36, 64, 100]

# Более читаемо с list comprehension
result = [x ** 2 for x in numbers if x % 2 == 0]

Производительность и лучшие практики

1. map ленив — использует итератор

numbers = [1, 2, 3, 4, 5]
mapped = map(lambda x: x * 2, numbers)

# Не вычисляет сразу — вычисляет при итерации
for value in mapped:
    print(value)  # Вычисляется по мере необходимости

# Для больших данных это экономит память

2. map vs numpy для массивов

import numpy as np

# Для больших числовых данных numpy быстрее
data = np.array([1, 2, 3, 4, 5])
result = data * 2  # Намного быстрее, чем map

# map используется для операций, которых нет в numpy
result = list(map(str.upper, ["hello", "world"]))

3. Когда использовать map

# Когда нужна простая трансформация одной последовательности
emails = ["john@example.com", "alice@example.com"]
usernames = list(map(lambda x: x.split("@")[0], emails))

# Когда работаешь с несколькими последовательностями
ids = [1, 2, 3]
names = ["Alice", "Bob", "Charlie"]
pairs = list(map(lambda id, name: (id, name), ids, names))

Ключевые выводы

  • map() — функциональный способ трансформации данных
  • Ленив — вычисляет результаты по мере необходимости
  • List comprehension часто более читаем и pythonic
  • Для больших данных рассмотри vectorization (numpy, pandas) или параллельную обработку (multiprocessing.Pool)
  • Комбинируй с filter() и reduce() для более сложных операций

map — это элегантный инструмент функционального программирования, но в Data Engineering часто более эффективны pandas и numpy.