Комментарии (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.