Рубріки: Основы

Функция map() в Python: как с ней правильно работать

Дмитро Сімагін

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

Синтаксис функции map()

Что касается синтаксиса функции map(), то он выглядит следующим образом:

map(function, iterable, ...)

 

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

Функция возвращает объект типа map, являющийся итератором. Чтобы получить результат в виде списка или другого типа данных, итерированный объект необходимо преобразовать.

Как использовать map() в Python

Перед нами несложная задача: у нас есть список цифр, и нам нужно вычислить квадрат каждого числа.

numbers = [3, 6, 8, 9, 13]
squared_numbers = map(lambda x: x**2, numbers)
print(list(squared_numbers)) # Выведет: [9, 36, 62, 81, 169]

 

В этом фрагменте кода мы применили lambda-функцию, которая вычисляет квадрат каждого числа, и добавили ее к элементам из списка numbers.

Как использовать несколько итеративных объектов

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

list1 = [10, 20, 30]
list2 = [40, 50, 60]
summed_list = map(lambda x, y: x + y, list1, list2)
print(list(summed_list)) # Выведет: [50, 70, 90]

 

Как видите, мы успешно добавили элементы из двух списков, используя функции lambda.

Функция map() и встроенные функции Python

Функция map() полезна при работе со встроенными функциями, такими как str(), int(), float() и т.д. Давайте для наглядности превратим список строк в целые числа:

str_numbers = ['30', '40', '50']
int_numbers = map(int, str_numbers)
print(list(int_numbers)) # Выведет: [30, 40, 50]

 

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

Использование map() с пользовательскими функциями

Кроме lambda можно применять обычные функции, которые заранее определены. К примеру, умножим каждое число списка на два:

def multiply_by_two(x):
return x*2

numbers = [10, 20, 30, 40]
doubled_numbers = map(multiply_by_two, numbers)
print(list(doubled_numbers)) # Выведет: [20, 40, 60, 80]

 

Функция multiply_by_two() умножает каждый элемент списка на два.

Какие преимущества имеет функция map()

Среди преимуществ, которые имеет Python функция map(), следует выделить:

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

Какие недостатки имеет функция map()

Наряду с очевидными плюсами, не обошлось и без минусов:

  • Плохая читабельность. Если функции сложны, использование map() затрудняет чтение кода.
  • Поскольку возвращаемый функцией map() объект является одноразовым итератором, то он будет «исчерпан» после использования. Поэтому его придется превратить в список или кортеж для дальнейшего использования.

Как использовать map() вместе с другими функциями

В большинстве случаев map() используется вместе с функциями filter(), reduce() или list comprehensions. То есть, вы можете объединять map() с filter(), чтобы сначала применить функцию к элементам, а затем использовать к ним фильтр по определенным требованиям.

numbers = [1, 2, 3, 4, 5, 6]
even_squares = filter(lambda x: x % 2 == 0, map(lambda x: x**2, numbers))
print(list(even_squares)) # Выведет: [4, 16, 36]

 

В этом фрагменте кода мы вычисляем квадрат каждого числа, а затем фильтруем те, которые являются четными.

Практические примеры использования map()

  1. Работа с текстом

Допустим, у нас есть список с именами людей, все буквы которых написаны в нижнем регистре, а нам нужно, чтобы имя начиналось с прописной буквы:

names = ['john', 'mary', 'jane']
capitalized_names = map(str.capitalize, names)
print(list(capitalized_names)) # Выведет: ['John', 'Mary', 'Jane']

 

  1. Вычисление символьных данных

Можно использовать map() для получения количества символов в словах:

words = ['apple', 'banana', 'cherry']
eng = map(len, words)
print(list(lengths)) # Выведет: [5, 6, 6]

 

  1. Обработка информации

К примеру, у нас есть файл, в котором содержатся числа, записанные как строки. Нам нужно превратить их прямо в список чисел:

with open('numbers.txt') as file:
   lines = file.readlines()
numbers = map(int, lines)
print(list(numbers))

 

Есть ли альтернативы для использования map() в Python?

Иногда вместо map() вы можете использовать list comprehensions или генераторы. Вот пример кода:

numbers = [2, 4, 5, 7, 9]
squared_numbers = [x**2 for x in numbers]
print(squared_numbers) # Выведет: [4, 16, 25, 49, 81]

 

Многим кажется, что list comprehensions выглядит более читабельно, чем map().

Вывод

Функция map() в языке Python представляет собой довольно удобный инструмент, который весьма полезен в обработке последовательностей. Она отлично подходит для таких случаев работы с данными, но у нее есть некоторые неудобства, такие как трудности в чтении сложных выражений. Тем не менее, map() дает разработчику преимущество в виде высокой производительности и сохранении памяти. Эти два преимущества делают map() оптимальным вариантом для работы с большими объемами данных в Python.

Останні статті

Что такое прокси-сервер: пояснение простыми словами, зачем нужны прокси

Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…

21.11.2024

Что такое PWA приложение? Зачем необходимо прогрессивное веб-приложение

Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…

19.11.2024

Как создать игру на телефоне: программирование с помощью конструктора

Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…

17.11.2024

Google Bard: эффективный аналог ChatGPT

В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…

14.11.2024

Скрипт и программирование: что это такое простыми словами

Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…

12.11.2024

Дедлайн в разработке: что это такое простыми словами

Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…

11.11.2024