Функция map() в Python: как с ней правильно работать
Функция map() в Python обычно используется для обработки таких объектов как списки, кортежи и многие другие последовательности. Благодаря ей можно применять заданную функцию к каждому элементу последовательности с возвратом нового итератора с результатами. Содержание этой статьи посвящено основным принципам использования и работы функции map(), ее синтаксису, примеру кода и вариантам практического применения.
Что касается синтаксиса функции map(), то он выглядит следующим образом:
map(function, iterable, ...)
Функция возвращает объект типа map, являющийся итератором. Чтобы получить результат в виде списка или другого типа данных, итерированный объект необходимо преобразовать.
Перед нами несложная задача: у нас есть список цифр, и нам нужно вычислить квадрат каждого числа.
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() полезна при работе со встроенными функциями, такими как str(), int(), float() и т.д. Давайте для наглядности превратим список строк в целые числа:
str_numbers = ['30', '40', '50'] int_numbers = map(int, str_numbers) print(list(int_numbers)) # Выведет: [30, 40, 50]
Этот случай доказывает, что конвертация типов данных в списке с помощью 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() умножает каждый элемент списка на два.
Среди преимуществ, которые имеет Python функция 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]
В этом фрагменте кода мы вычисляем квадрат каждого числа, а затем фильтруем те, которые являются четными.
Допустим, у нас есть список с именами людей, все буквы которых написаны в нижнем регистре, а нам нужно, чтобы имя начиналось с прописной буквы:
names = ['john', 'mary', 'jane'] capitalized_names = map(str.capitalize, names) print(list(capitalized_names)) # Выведет: ['John', 'Mary', 'Jane']
Можно использовать map() для получения количества символов в словах:
words = ['apple', 'banana', 'cherry'] eng = map(len, words) print(list(lengths)) # Выведет: [5, 6, 6]
К примеру, у нас есть файл, в котором содержатся числа, записанные как строки. Нам нужно превратить их прямо в список чисел:
with open('numbers.txt') as file: lines = file.readlines() numbers = map(int, lines) print(list(numbers))
Иногда вместо 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), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…