Функция 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**n
TO-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.