Функция Python map(), объяснение с примерами

Опубликовано: 2022-08-25

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

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

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

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

Как применить функцию к элементам списка Python

Применение функции к элементам списка 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 выше мы можем определить выходное выражение и список для цикла.

python-карта-функция-мотивация

Затем мы можем изменить общее выражение понимания списка:

 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()

Общий синтаксис для использования Функция Python map() выглядит следующим образом:

 map(function, iterable_1,[iterable_2,...,iterable_n])

Функция map() принимает как минимум два аргумента: функцию и итерируемый объект .

В приведенном выше синтаксисе:

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

Что возвращает функция map()?

Он возвращает объект карты. Затем вы можете преобразовать объект карты в список, используя синтаксис: list(map(function,iterable)).

В зависимости от варианта использования вы можете преобразовать его в кортеж Python.

Что возвращает функция map()

Теперь, когда вы изучили синтаксис функции map() Python, давайте начнем кодировать примеры.

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

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

Используйте функцию 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() со встроенными функциями

В этом разделе мы узнаем, как использовать 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() с лямбда-функциями

Используйте функцию 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() с несколькими итерируемыми объектами

Используйте функцию 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.