📝 Python

map() — Преобразуй каждый элемент!

P
Автор
PyLand Team
📅
Опубликовано
03.04.2026
⏱️
Время чтения
3 мин
👁️
Просмотров
430
🌿
Уровень
Средний

Функция map() лениво применяет преобразование к каждому элементу итерируемого объекта.

Что такое map()?

map() применяет функцию к каждому элементу списка и возвращает новый список результатов.

numbers = [1, 2, 3, 4, 5]

# Старый способ
doubled = []
for num in numbers:
    doubled.append(num * 2)

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

Синтаксис

map(функция, итерируемый_объект)

Возвращает объект map — оборачивай в list(), чтобы получить список.


Базовые примеры

Умножение и возведение в степень

numbers = [1, 2, 3, 4, 5]

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

squares = list(map(lambda x: x ** 2, numbers))
print(squares)  # [1, 4, 9, 16, 25]

Преобразование типов

# str → int
strings = ["1", "2", "3", "4", "5"]
numbers = list(map(int, strings))
print(numbers)  # [1, 2, 3, 4, 5]

# int → str
numbers = [10, 20, 30]
strings = list(map(str, numbers))
print(strings)  # ['10', '20', '30']

# float → int (отбрасывает дробную часть)
floats = [1.5, 2.7, 3.9]
integers = list(map(int, floats))
print(integers)  # [1, 2, 3]

Строки

words = ["python", "javascript", "go"]

# Заглавные буквы (без lambda — передаём функцию напрямую)
upper_words = list(map(str.upper, words))
print(upper_words)  # ['PYTHON', 'JAVASCRIPT', 'GO']

# Длины слов
lengths = list(map(len, words))
print(lengths)  # [6, 10, 2]

# Форматирование
names = ["алиса", "боб", "карл"]
capitalized = list(map(str.capitalize, names))
print(capitalized)  # ['Алиса', 'Боб', 'Карл']

map() с несколькими списками

map() может принимать несколько итерируемых объектов — функция получает по одному элементу из каждого:

numbers1 = [1, 2, 3]
numbers2 = [10, 20, 30]

sums = list(map(lambda x, y: x + y, numbers1, numbers2))
print(sums)  # [11, 22, 33]

products = list(map(lambda x, y: x * y, numbers1, numbers2))
print(products)  # [10, 40, 90]

Если списки разной длины, map() останавливается на коротком:

short = [1, 2]
long  = [10, 20, 30, 40]

result = list(map(lambda x, y: x + y, short, long))
print(result)  # [11, 22]  ← только 2 элемента

Практические примеры

Обработка цен

prices = [100, 200, 150, 300]

# Скидка 20%
discounted = list(map(lambda p: round(p * 0.8, 2), prices))
print(discounted)  # [80.0, 160.0, 120.0, 240.0]

# Налог 10%
with_tax = list(map(lambda p: round(p * 1.1, 2), prices))
print(with_tax)  # [110.0, 220.0, 165.0, 330.0]

Работа со словарями

students = [
    {"name": "Алиса", "grade": 95},
    {"name": "Боб",   "grade": 87},
    {"name": "Карл",  "grade": 92}
]

# Извлечь имена
names = list(map(lambda s: s["name"], students))
print(names)  # ['Алиса', 'Боб', 'Карл']

# Добавить статус
with_status = list(map(
    lambda s: {**s, "status": "Отличник" if s["grade"] >= 90 else "Хорошист"},
    students
))
# [{'name': 'Алиса', 'grade': 95, 'status': 'Отличник'}, ...]

map() + filter()

numbers = [1, 2, 3, 4, 5, 6]

# Удвоить чётные числа
result = list(map(lambda x: x * 2, filter(lambda x: x % 2 == 0, numbers)))
print(result)  # [4, 8, 12]

# map + reduce: удвоить → сумма
from functools import reduce

doubled = map(lambda x: x * 2, numbers)
total = reduce(lambda acc, x: acc + x, doubled, 0)
print(total)  # 42

map() vs List Comprehension

numbers = [1, 2, 3, 4, 5]

doubled_map  = list(map(lambda x: x * 2, numbers))
doubled_comp = [x * 2 for x in numbers]

print(doubled_map == doubled_comp)  # True

map() удобен, когда уже есть готовая функция:

numbers = ["1", "2", "3"]
integers = list(map(int, numbers))  # Чище, чем [int(x) for x in numbers]

Comprehension удобнее, когда нужно добавить условие или сложную логику:

even_doubled = [x * 2 for x in numbers if x % 2 == 0]

Распространённые ошибки

Ошибка 1: Забыли list()

numbers = [1, 2, 3]

result = map(lambda x: x * 2, numbers)
print(result)  # <map object at 0x...>  — не список!

# ✅ ПРАВИЛЬНО
result = list(map(lambda x: x * 2, numbers))
print(result)  # [2, 4, 6]

Ошибка 2: Функция не возвращает значение

def double_bad(x):
    x * 2  # Забыли return!

result = list(map(double_bad, [1, 2, 3]))
print(result)  # [None, None, None]

# ✅ ПРАВИЛЬНО
def double_good(x):
    return x * 2

result = list(map(double_good, [1, 2, 3]))
print(result)  # [2, 4, 6]

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

Как функции работают вместе в Python 🧩

Небольшая функция обычно решает одну понятную задачу. Но настоящая программа состоит из нескольких задач: получить...

📅 09.08.2026 👁️ 78
📝

filter() — Отбери нужное!

Функция filter() оставляет элементы, для которых проверка возвращает истинное значение.

📅 03.04.2026 👁️ 430
📝

Lambda функции

Lambda — маленькая анонимная функция в одну строку.

📅 03.04.2026 👁️ 417

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!