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

В този урок ще научите как да използвате функцията map() на Python, за да приложите функция към всички елементи на итерируем.

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

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

До края на този урок ще можете да използвате функцията map() на Python — за пренаписване на многословни цикли и разбиране на списъци. Ще кодирате няколко примера, за да разберете различните начини, по които можете да използвате функцията 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 Loop

За да направите това, можете да използвате 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.

  Отстранете проблема с източването на батерията на Samsung Note 4

Синтаксис на функцията map() на Python

Общият синтаксис за използване на функцията map() на Python е както следва:

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

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

В горния синтаксис:

  • функция обозначава функция на Python или като цяло всяка извикана на Python. Това включва потребителски дефинирани и вградени функции, класове, екземпляри и методи на класове и др.
  • iterable е всеки валиден Python итерируем, като списък, кортеж и низ.
  • Функцията map() се прилага и функцията се използва за всеки елемент в итерируемия.

Какво връща функцията map()?

Връща обект на карта. След това можете да прехвърлите обекта map към списък, като използвате синтаксиса: list(map(function,iterable)).

В зависимост от случая на използване можете да го прехвърлите в кортеж на Python.

Сега, след като научихте синтаксиса на функцията map() на Python, нека започнем да кодираме примери.

Трябва да имате Python 3.x, за да следвате този урок. В противен случай можете да стартирате кодовите фрагменти в pctechbg.net онлайн Python редактор.

Как да използвате функцията 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() и да приложим функцията за дължина към всеки низ, както е показано по-долу.

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

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

  10 най-добри инструменти за почистване на пинг, които да ви разкажат повече за вашата мрежа

Следващият пример съдържа кортеж, съдържащ информация за броя на спалните, района и града, в който се намира дадена къща.

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

Понякога ще имате функция, чието тяло съдържа само един ред код и може да се наложи да използвате функцията само веднъж и да не я препращате другаде в програмата. Можете да дефинирате такива функции като ламбда функция в Python.

Забележка: ламбда аргументи: израз е общият синтаксис за използване на ламбда функция на Python.

#1. Разгледайте следните низове в списъка. Да предположим, че искате да получите списък strings_rev – съдържащ обърнато копие на всеки от низовете.

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

Можем да обърнем низ на Python, като използваме нарязване на низове.

  Поправете грешка на ниво 10.0 на функцията DX11

Забележка: Това е обобщение на израза за нарязване на низ str[start:stop:step].

– Без стойностите за начало и край, срезът започва в началото на низа и се простира до края на низа.
– Отрицателните стойности на стъпката дават резени, започващи от края на низа.
– Следователно ул[::-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(), за да приложим функцията за площ върху горните списъци, като предадем списъците с дължини и ширини.

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

Тъй като функционалната област приема два аргумента, стойностите за дължина и ширина се използват съответно от списъците с дължини и ширини.

Output
[36, 32, 60, 198]

#2. Математическият модул на Python има функцията log, която ни помага да изчислим логаритъма на число спрямо произволна основа.

Забележка: log(x, base) връща стойността на log x към основата, определена от стойността base, log base x. Ако основата не е посочена, базовата стойност по подразбиране е e (log изчислява натурален логаритъм).

В този пример:

  • Списъкът x съответства на стойностите, за които искате да изчислите логаритъма.
  • Базовият списък съдържа всички базови стойности, които да се използват при изчисляването на логаритъм.
x = [2,6,12,10]
base = [2,3,2,5]

Можем да използваме функцията map() на Python с 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]

Заключение

Ето обобщение на това, което сте научили в този урок:

  • Функцията map() на Python приема поне два аргумента: функция и итерируем, със синтаксиса map(function, iterable(s)).
  • Функцията може да бъде всяка валидна Python извикана.
  • Когато функцията приема k аргумента, използвайте функцията map() с функцията и всеки от k аргумента в итерируем.

След това се научете да работите с набори в Python.