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

Начнем наше обсуждение с примера.
Здесь nums — список чисел.
nums = [2,4,3,7] Далее рассмотрим функцию self_pow() . Функция self_pow() принимает число в качестве аргумента и возвращает число, возведенное в степень самого числа: n**n.
В Python ** — это оператор возведения в степень. a**b возвращает значение a, возведенное в степень b, a b .
def self_pow(n): return n**nTO-DO : Создать новый список
nums_pow, применив функциюself_pow()к каждому элементу в спискеnums.
Использование для цикла
Для этого вы можете использовать циклы for в Python:
- Для каждого числа в списке
numsвызовите функциюself_pow()сnumв качестве аргумента. - Добавьте результат вызова функции в новый список
nums_pow.
nums_pow = [] for num in nums: nums_pow.append(self_pow(num)) print(nums_pow) В выводе каждое число nums возводится к самому себе. Элементы в списке nums_pow следующие: 2 2 , 4 4 , 3 3 ,7 7 .
Output [4, 256, 27, 823543]Использование понимания списка
Вы можете сделать это кратким, используя понимание списка. Из явного цикла for выше мы можем определить выходное выражение и список для цикла.

Затем мы можем изменить общее выражение понимания списка:
new_list = [<output expression> for item in iterable] Выражение понимания списка для создания списка nums_pow выглядит следующим образом:
nums_pow = [self_pow(num) for num in nums] print(nums_pow)Вывод такой же, как и при использовании циклов for, как и ожидалось.
Output [4, 256, 27, 823543] Вместо понимания циклов и списков вы можете использовать функцию Python map() с кратким синтаксисом, который помогает применять функцию ко всем элементам в итерируемом объекте. Начнем с изучения синтаксиса функции карты.
Синтаксис функции Python map()

Общий синтаксис для использования Функция Python map() выглядит следующим образом:
map(function, iterable_1,[iterable_2,...,iterable_n]) Функция map() принимает как минимум два аргумента: функцию и итерируемый объект .
В приведенном выше синтаксисе:
- function обозначает функцию Python или вообще любую вызываемую Python функцию. Сюда входят определяемые пользователем и встроенные функции, классы, методы экземпляров и классов и многое другое.
- iterable — это любой допустимый итерируемый объект Python, такой как список, кортеж и строка.
- Функция map() применяет функцию к каждому элементу в итерируемом
Что возвращает функция map()?
Он возвращает объект карты. Затем вы можете преобразовать объект карты в список, используя синтаксис: list(map(function,iterable)).
В зависимости от варианта использования вы можете преобразовать его в кортеж Python.

Теперь, когда вы изучили синтаксис функции map() Python, давайте начнем кодировать примеры.
У вас должен быть Python 3.x, чтобы следовать этому руководству. В противном случае вы можете запустить фрагменты кода в онлайн-редакторе Python Geekflare.
Как использовать функцию map() с пользовательскими функциями

# 1 . Раньше мы применяли self_pow() к каждому числу в списке nums . В синтаксисе функции map() мы можем передать функцию self_pow и nums значения списка в качестве аргументов.
Примечание . Вы должны указать только имя функции, а не вызов функции. Используйте self_pow а не self_pow() .
Функция map() возвращает объект карты.
print(map(self_pow,nums)) <map object at 0x7f7d315c14d0>Затем мы можем преобразовать объект карты в список, используя функцию list(), как показано ниже.
nums_pow = list(map(self_pow,nums)) print(nums_pow) Вот результат, в котором каждое num в nums сопоставляется с num num в списке nums_pow .
Output [4, 256, 27, 823543] # 2 . Рассмотрим следующую функцию inch_to_cm() , которая преобразует дюймы в сантиметры. 1 дюйм = 2,54 см .
def inch_to_cm(inch): return inch*2.54 Чтобы преобразовать значения дюймов в списке inches в сантиметры, вы можете использовать функцию map() , как показано в ячейке кода ниже.
inches = [5.54,3.4,1,25,8.2] cms = list(map(inch_to_cm,inches)) print(cms) Список cms содержит значения дюймов, выраженные в сантиметрах.
Output [14.0716, 8.636, 2.54, 63.5, 20.828]Как использовать функцию map() со встроенными функциями

В этом разделе мы узнаем, как использовать map() со встроенными функциями в Python.
# 1 . strings списка — это список языков программирования. Вы хотите создать новый список strings_upper , содержащий строки языка программирования в верхнем регистре.
strings = ['JavaScript','Rust','Python','Go']Встроенный строковый метод
.upper()работает со строкой и возвращает копию, отформатированную в верхнем регистре.
strings_upper = list(map(str.upper,strings)) print(strings_upper) Список strings_upper включает строки в списке strings , отформатированные в верхнем регистре.
Output ['JAVASCRIPT', 'RUST', 'PYTHON', 'GO'] # 2 . Встроенная функция len() в Python принимает последовательность в качестве аргумента и возвращает ее длину. Чтобы найти длину каждой из строк в списке strings , мы можем использовать функцию map() и применить функцию длины к каждой строке, как показано ниже.
strings_len = list(map(len,strings)) print(strings_len) Output [10, 4, 6, 2] # 3 . Вы можете использовать функцию map() с другими коллекциями, такими как кортежи.
Следующий пример содержит кортеж, содержащий информацию о количестве спален, районе и городе, в котором находится дом.

В Python функция type() возвращает тип данных любого объекта Python. Чтобы получить тип данных всех элементов в этом кортеже, вы можете использовать функцию map() для вызова функции type для каждого элемента кортежа.
house = (2,758.5,'Bangalore') house_elt_type = tuple(map(type,house)) print(house_elt_type)Мы преобразовали объект карты в кортеж. Вы также можете добавить в список или любую другую коллекцию.
В приведенном ниже выводе мы видим, что типы данных 2, 758,5 и Bangalore были выведены как «int», «float» и «str» соответственно.
Output (<class 'int'>, <class 'float'>, <class 'str'>)# 4 . В Python вы можете импортировать встроенные модули и использовать функции, определенные в модулях.
Чтобы вычислить квадратный корень каждого числа в списке nums , вы можете использовать функцию квадратного корня sqrt из математического модуля.
import math nums = [30,90,34,45,97] nums_sqrt = list(map(math.sqrt,nums)) print(nums_sqrt) Output [5.477225575051661, 9.486832980505138, 5.830951894845301, 6.708203932499369, 9.848857801796104]Приведенный выше вывод трудно разобрать и следовать. Вы можете округлить каждое значение квадратного корня, скажем, до двух знаков после запятой.
Как округлить число с плавающей запятой в Python
Давайте определим функцию round_2() , которая принимает значение с плавающей запятой и округляет его до двух знаков после запятой.
def round_2(num): return round(num,2) Теперь вы можете использовать функцию map() со round_2 и nums_sqrt .
nums_sqrt_round = list(map(round_2,nums_sqrt)) print(nums_sqrt_round) Output [5.48, 9.49, 5.83, 6.71, 9.85] Вы также можете использовать вложенные функции map() , где внутренняя функция карты используется для вычисления list nums_sqrt , а внешняя функция карты выполняет операцию округления.
nums_sqrt_round = list(map(round_2,list(map(math.sqrt,nums)))) print(nums_sqrt_round) Output [5.48, 9.49, 5.83, 6.71, 9.85]Выходные данные идентичны в обоих вышеперечисленных подходах. Однако вы должны убедиться, что код удобочитаем и удобен для сопровождения при вложенных функциях, как показано выше.
Как использовать функцию map() с лямбда-функциями

В предыдущих разделах вы узнали, как использовать функцию Python map() со встроенными и определяемыми пользователем функциями. Теперь вы узнаете, как использовать функцию map() с лямбда-функциями, которые в Python являются анонимными.
Иногда у вас будет функция, тело которой содержит только одну строку кода, и вам может потребоваться использовать функцию только один раз и не ссылаться на нее где-либо еще в программе. Вы можете определить такие функции как лямбда-функцию в Python.
Примечание .
lambda args: expression— это общий синтаксис для использования лямбда-функции Python.
# 1 . Рассмотрим следующие strings списка. Предположим, вы хотите получить список strings_rev , содержащий перевернутую копию каждой из строк.
strings = ['JavaScript','Rust','Python','Go']Мы можем перевернуть строку Python, используя нарезку строки.
Примечание . Это обобщение выражения нарезки строк
str[start:stop:step].– Без
startиstopзначений срез начинается с начала строки и продолжается до конца строки.
– Отрицательные значенияstepдают срезы, начиная с конца строки.
– Следовательно,str[::-1]возвращает обратную копию str.
Вы можете использовать эту лямбда-функцию: lambda x:x[::-1] Внутри функции карты, как показано ниже.
strings_rev = list(map(lambda x:x[::-1],strings)) print(strings_rev)Как и в других примерах, мы приводим объект карты к списку. В выводе мы видим, что каждая из строк в строках списка была перевернута.
Output ['tpircSavaJ', 'tsuR', 'nohtyP', 'oG']# 2 . В предыдущем разделе мы вычислили квадратный корень каждого числа в списке чисел, а затем округлили каждое значение квадратного корня до двух знаков после запятой.
Для этого мы использовали функцию round_2() . Давайте перепишем round_2() как лямбда-функцию и используем ее с функцией map() , описанной ниже.
nums_sqrt_round_l =list(map(lambda num:round(num,2),nums_sqrt)) print(nums_sqrt_round_l) Как видно ниже, результат идентичен тому, что мы получили при использовании функции round_2() .
Output [5.48, 9.49, 5.83, 6.71, 9.85]Как использовать функцию map() с несколькими итерируемыми объектами

В примерах, которые мы видели, мы применяли функцию ко всем элементам ровно одной итерации.
Иногда у нас могут быть функции, которые принимают два или более аргумента. В этом случае каждый аргумент хранится в списке или любой подобной коллекции.
Мы также можем использовать функцию Python map() с несколькими списками.
# 1 . Рассмотрим следующую функцию area() , которая принимает length и breadth в качестве входных данных и возвращает площадь length*breadth .
def area(length,breadth): return length*breadth Длина и ширина разных прямоугольников хранятся в двух отдельных списках, lengths и breadths соответственно.
lengths = [4,8,10,18] breadths = [9,4,6,11] Мы можем использовать функцию map() , чтобы применить функцию площади к приведенным выше спискам, передав списки как lengths , так и breadths .
areas = list(map(area,lengths,breadths)) print(areas) Поскольку функция area принимает два аргумента, значения длины и ширины берутся из списков lengths breadths соответственно.
Output [36, 32, 60, 198]# 2 . Математический модуль Python имеет функцию журнала, которая помогает нам вычислять логарифм числа по любому основанию.
Примечание : log(x, base) возвращает значение log x по основанию, заданному значением base , log base x . Если основание не указано, базовым значением по умолчанию является e (log вычисляет натуральный логарифм).
В этом примере:
- Список
xсоответствует значениям, для которых вы хотите вычислить логарифм. -
baseсписок содержит все базовые значения, которые будут использоваться при вычислении логарифма.
x = [2,6,12,10] base = [2,3,2,5] Мы можем использовать функцию Python map() с math.log , списками, x и base , чтобы получить новый список log_x следующим образом.
log_x = list(map(math.log,x,base)) print(log_x)Вот результат.
Output [1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]Вывод
Вот краткое изложение того, что вы узнали в этом уроке:
- Функция Python map() принимает как минимум два аргумента: функцию и итерируемый объект с синтаксисом map(function, iterable(s)) .
- Функция может быть любой допустимой вызываемой Python.
- Когда функция принимает k аргументов, используйте функцию
map()с функцией и каждым из k аргументов в итерируемом объекте.
Далее научитесь работать с множествами в Python.
