Функція Python map(), пояснена на прикладах

У цьому посібнику ви дізнаєтесь, як використовувати функцію 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, ab.

def self_pow(n):
  return n**n

ЗАВДАННЯ: створити новий список nums_pow, застосувавши функцію self_pow() до кожного елемента списку nums.

Використання циклу for

Для цього ви можете використовувати цикли 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 такі: 22, 44, 33,77.

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() із лаконічним синтаксисом, яка допомагає застосувати функцію до всіх елементів у ітерації. Почнемо з вивчення синтаксису функції map.

Синтаксис функції Python map().

Загальний синтаксис використання функції Python map() такий:

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

Функція map() приймає принаймні два аргументи, функцію та ітерований.

  Як налаштувати форму витрат в Microsoft Word

У наведеному вище синтаксисі:

  • функція позначає функцію Python або загалом будь-яку викликану Python. Це включає визначені користувачем і вбудовані функції, класи, екземпляри та методи класів тощо.
  • iterable — це будь-який дійсний ітератор Python, такий як список, кортеж і рядок.
  • Застосовується функція map(), яка використовується для кожного елемента ітерованого елемента.

Що повертає функція map()?

Він повертає об’єкт карти. Потім ви можете перетворити об’єкт карти на список за допомогою синтаксису: list(map(function,iterable)).

Залежно від варіанту використання, ви можете перетворити його в кортеж Python.

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

Ви повинні мати Python 3.x, щоб слідувати цьому посібнику. Крім того, ви можете запустити фрагменти коду в онлайн-редакторі Python techukraine.net.

Як використовувати функцію 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 зіставляється з numnum у списку nums_pow.

Output
[4, 256, 27, 823543]

#2. Розглянемо таку функцію inch_to_cm(), яка перетворює дюйми на сантиметри. 1 дюйм = 2,54 см.

def inch_to_cm(inch):
  return inch*2.54

Щоб перетворити значення дюймів у списку дюймів у сантиметри, можна скористатися функцією 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_upper, який містить рядки мови програмування у верхньому регістрі.

strings = ['JavaScript','Rust','Python','Go']

Вбудований рядковий метод .upper() діє на рядок і повертає копію, відформатовану у верхньому регістрі.

strings_upper = list(map(str.upper,strings)) 
print(strings_upper)

Список strings_upper містить рядки у списку рядків, відформатованих у верхньому регістрі.

Output
['JAVASCRIPT', 'RUST', 'PYTHON', 'GO']

#2. Вбудована функція len() у Python приймає послідовність як аргумент і повертає її довжину. Щоб знайти довжину кожного з рядків у списку рядків, ми можемо використати функцію map() і застосувати функцію length до кожного рядка, як показано нижче.

strings_len = list(map(len,strings))
print(strings_len)
Output
[10, 4, 6, 2]

#3. Ви можете використовувати функцію map() з іншими колекціями, наприклад кортежами.

  Як вирівняти таблиці та зображення в Microsoft Word

Наступний приклад містить кортеж, що містить інформацію про кількість спалень, район і місто, в якому розташований будинок.

У Python функція type() повертає тип даних будь-якого об’єкта Python. Щоб отримати тип даних усіх елементів у цьому кортежі, ви можете використати функцію map() для виклику функції типу для кожного елемента кортежу.

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(), де внутрішня функція map використовується для обчислення списку квадратного кореня nums_sqrt, а зовнішня функція map виконує операцію округлення.

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.

Примітка: лямбда-аргументи: вираз — це загальний синтаксис використання лямбда-функції Python.

#1. Розглянемо наступні рядки списку. Припустімо, ви хочете отримати список strings_rev, який містить перевернуту копію кожного рядка.

strings = ['JavaScript','Rust','Python','Go']

Ми можемо змінити рядок Python за допомогою нарізки рядків.

Примітка. Це узагальнення виразу нарізки рядка str[start:stop:step].

  Що таке маленький місяць поруч із текстом на iPhone?

– Без початкового та кінцевого значень зріз починається на початку рядка й продовжується до кінця рядка.
– Від’ємні значення кроку дають фрагменти, починаючи з кінця рядка.
– Тому вул[::-1] повертає перевернуту копію str.

Ви можете використовувати цю лямбда-функцію: лямбда 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(), яка приймає довжину та ширину як вхідні дані та повертає площу довжина*ширина.

def area(length,breadth):
  return length*breadth

Довжина та ширина різних прямокутників зберігаються у двох окремих списках, довжини та ширини відповідно.

lengths = [4,8,10,18]
breadths = [9,4,6,11]

Ми можемо використовувати функцію map(), щоб застосувати функцію area до наведених вище списків, передавши списки довжин і ширин.

areas = list(map(area,lengths,breadths))
print(areas)

Оскільки функціональна область приймає два аргументи, значення довжини та ширини використовуються зі списків довжини ширини відповідно.

Output
[36, 32, 60, 198]

#2. Математичний модуль Python має функцію журналу, яка допомагає нам обчислити логарифм числа за будь-якою основою.

Примітка: log(x, base) повертає значення log x до основи, визначеної значенням base, log base x. Якщо основу не вказано, стандартним базовим значенням є e (log обчислює натуральний логарифм).

У цьому прикладі:

  • Список x відповідає значенням, для яких ви хочете обчислити логарифм.
  • Базовий список містить усі базові значення, які будуть використовуватися під час обчислення логарифмів.
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() приймає принаймні два аргументи: функцію та iterable із синтаксисом map(function, iterable(s)).
  • Функція може бути будь-якою допустимою можливістю виклику Python.
  • Коли функція приймає k аргументів, використовуйте функцію map() із функцією та кожним із k аргументів у ітерації.

Далі навчіться працювати з наборами на Python.