Функција Питхон мап(), објашњена примерима

У овом водичу ћете научити како да користите функцију Питхон мап() да примените функцију на све ставке итерабле.

Питхон подржава парадигму функционалног програмирања која вам омогућава да дефинишете задатке као програмски рачунање функција. Питхон функције можете третирати као објекте: функција може узети другу функцију као параметар и вратити другу функцију.

Функција мап() узима функцију као аргумент и омогућава вам да је примените на све ставке у низу.

До краја овог водича моћи ћете да користите функцију Питхон мап() — да препишете опширне петље и наведете разумевање листе. Кодираћете неколико примера да бисте разумели различите начине на које можете да користите функцију мап().

Како применити функцију на елементе Питхон листе

Почнимо нашу дискусију са примером.👩‍🏫

Овде нумс је листа бројева.

nums = [2,4,3,7]

Затим размотрите функцију селф_пов(). Функција селф_пов() узима број као аргумент и враћа број подигнут на степен самог броја: н**н.

У Питхон-у, ** је оператор експоненције. а**б враћа вредност а подигнуте на степен б, аб.

def self_pow(n):
  return n**n

ТО-ДО: Да креирате нову листу нумс_пов применом функције селф_пов() на сваки елемент у листи нумс.

Коришћење за петљу

Да бисте то урадили, можете користити фор петље у Питхон-у:

  • За сваки број на листи бројева, позовите функцију селф_пов() са нум као аргументом.
  • Додајте резултат позива функције на нову листу нумс_пов.
nums_pow = []

for num in nums:
  nums_pow.append(self_pow(num))

print(nums_pow)

У излазу, сваки број нумс се подиже на себе. Елементи у листи нумс_пов су следећи: 22, 44, 33,77.

Output
[4, 256, 27, 823543]

Коришћење листе разумевања

Ово можете учинити сажетим користећи разумевање листе. Из експлицитне фор петље изнад, можемо идентификовати излазни израз и листу кроз коју треба проћи.

Затим можемо да изменимо генерички израз за разумевање листе:

new_list = [<output expression> for item in iterable]

Израз за разумевање листе за генерисање листе нумс_пов је следећи:

nums_pow = [self_pow(num) for num in nums]
print(nums_pow)

Излаз је исти као код коришћења фор петљи, као што се и очекивало.

Output
[4, 256, 27, 823543]

Уместо разумевања петље и листе, можете да користите функцију Питхон мап() са сажетом синтаксом и помаже у примени функције на све ставке у итерабле. Почнимо са учењем синтаксе функције мапе.

  Како пронаћи савршен фитнесс трацкер који одговара вашим потребама

Синтакса функције Питхон мап().

Општа синтакса за коришћење функције Питхон мап() је следећа:

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

Функција мап() узима најмање два аргумента, функцију и итерабле.

У горњој синтакси:

  • функција означава Питхон функцију или уопште, било коју Питхон функцију која се може позвати. Ово укључује кориснички дефинисане и уграђене функције, класе, методе инстанце и класе и још много тога.
  • итерабле је било који важећи Питхон итерабле, као што је листа, тупле и стринг.
  • Примењује се функција мап(), а функција се користи за сваки елемент у итерабле.

Шта враћа функција мап()?

Враћа објекат мапе. Затим можете пребацити објекат мапе на листу користећи синтаксу: лист(мап(фунцтион,итерабле)).

У зависности од случаја употребе, можете га пребацити у Питхон тупле.

Сада када сте научили синтаксу функције Питхон мап(), почнимо са кодирањем примера.

Требало би да имате Питхон 3.к да бисте пратили овај водич. У супротном, можете покренути исечке кода у вдзвдз онлајн Питхон уређивачу.

Како користити функцију мап() са кориснички дефинисаним функцијама

#1. Раније смо применили функцију селф_пов() на сваки број на листи бројева. У синтакси за функцију мап() можемо проследити функцију селф_пов и листу бројева као аргументе.

Напомена: Требало би да наведете само име функције, а не позив функције. Користите селф_пов а не селф_пов().

Функција мап() враћа објекат мапе.

print(map(self_pow,nums))

<map object at 0x7f7d315c14d0>

Затим можемо да пребацимо објекат мапе у листу помоћу функције лист(), као што је приказано испод.

nums_pow = list(map(self_pow,nums))
print(nums_pow)

Ево излаза где је сваки нум ин нумс мапиран у нумнум на листи нумс_пов.

Output
[4, 256, 27, 823543]

#2. Размотрите следећу функцију инцх_то_цм() која претвара инче у центиметре. 1 инч = 2,54 цм.

def inch_to_cm(inch):
  return inch*2.54

Да бисте конвертовали вредности инча на листи инча у центиметре, можете користити функцију мап() као што је приказано у ћелији кода испод.

inches = [5.54,3.4,1,25,8.2]
cms = list(map(inch_to_cm,inches))
print(cms)

цмс листа садржи вредности инча изражене у центиметрима.

Output
[14.0716, 8.636, 2.54, 63.5, 20.828]

Како користити функцију мап() са уграђеним функцијама

У овом одељку ћемо научити како да користимо мап() са уграђеним функцијама у Питхон-у.

#1. Лист стрингова је листа програмских језика. Желели бисте да направите нову листу стрингс_уппер која садржи низове програмског језика у великим словима.

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

Уграђени стринг метод .уппер() делује на стринг и враћа копију форматирану великим словима.

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

Листа стрингс_уппер укључује низове у низовима листе форматиране великим словима.

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

#2. Уграђена функција лен() у Питхон-у узима низ као аргумент и враћа његову дужину. Да бисмо пронашли дужину сваког од стрингова на листи стрингова, можемо користити функцију мап() и применити функцију дужине на сваки низ, као што је приказано испод.

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

#3. Функцију мап() можете користити са другим колекцијама као што су тупле.

  18 Сви главни шефови у Елден Рингу наведени по реду

Следећи пример садржи тупле који садржи информације о броју спаваћих соба, области и граду у којем се кућа налази.

У Питхон-у, функција типе() враћа тип података било ког Питхон објекта. Да бисте добили тип података свих ставки у овој торци, можете користити функцију мап() да позовете функцију типа за сваку ставку тупле.

house = (2,758.5,'Bangalore')
house_elt_type = tuple(map(type,house))
print(house_elt_type)

Пребацили смо објекат мапе у тупле. Такође можете убацити у листу или било коју другу колекцију.

У доњем излазу видимо да су типови података 2, 758.5 ​​и Бангалоре изведени као ‘инт’, ‘флоат’ и ‘стр’, респективно.

Output
(<class 'int'>, <class 'float'>, <class 'str'>)

#4. У Питхон-у можете увести уграђене модуле и користити функције дефинисане у модулима.

Да бисте израчунали квадратни корен сваког броја на листи бројева, можете користити функцију квадратног корена скрт из математичког модула.

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]

Горњи излаз је тешко рашчланити и пратити. Можда ћете желети да заокружите сваку вредност квадратног корена на две децимале.

Како заокружити број са плутајућим зарезом у Питхон-у

Хајде да дефинишемо функцију роунд_2() која узима вредност са покретним зарезом и заокружује је на две децимале.

def round_2(num):
  return round(num,2)

Сада можете да користите функцију мап() са листом роунд_2 и нумс_скрт.

nums_sqrt_round = list(map(round_2,nums_sqrt))
print(nums_sqrt_round)
Output
[5.48, 9.49, 5.83, 6.71, 9.85]

Такође можете користити угнежђене функције мап() где се функција унутрашње мапе користи за израчунавање листе квадратног корена нумс_скрт, а функција спољне мапе обавља операцију заокруживања.

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]

Резултати су идентични у оба горња приступа. Међутим, требало би да се уверите да је код читљив и одржаван када угнежде функције као што је приказано изнад.

Како користити функцију мап() са Ламбда функцијама

У претходним одељцима научили сте како да користите функцију Питхон мап() са уграђеним и кориснички дефинисаним функцијама. Сада ћете научити како да користите функцију мап() са ламбда функцијама, које су анонимне у Питхон-у.

Понекад ћете имати функцију чије тело садржи само једну линију кода, и можда ћете морати да користите функцију само једном и да је не референцирате негде другде у програму. Такве функције можете дефинисати као ламбда функцију у Питхон-у.

Напомена: ламбда аргс: израз је општа синтакса за коришћење Питхон ламбда функције.

#1. Размотрите следеће низове листе. Претпоставимо да желите да добијете листу стрингс_рев – која садржи обрнуту копију сваког од стрингова.

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

Можемо преокренути Питхон стринг користећи сечење стрингова.

  13 најбољих фантастичних игара за играче опседнуте митовима и магијом [2023]

Напомена: Ово је генерализација израза за резање стрингова стр[start:stop:step].

– Без почетне и стоп вредности, пресек почиње на почетку низа и протеже се до краја низа.
– Негативне вредности корака дају резове који почињу од краја низа.
– Дакле, ул[::-1] враћа обрнуту копију стр.

Можете користити ову ламбда функцију: ламбда к:к[::-1]Унутар функције мапе, као што је приказано испод.

strings_rev = list(map(lambda x:x[::-1],strings))
print(strings_rev)

Као иу другим примерима, објекат мапе бацамо у листу. У излазу видимо да је сваки од стрингова у стринговима листе обрнут.

Output
['tpircSavaJ', 'tsuR', 'nohtyP', 'oG']

#2. У претходном одељку смо израчунали квадратни корен сваког броја на листи бројева, а затим заокружили сваку вредност квадратног корена на две децимале.

За ово смо користили функцију роунд_2(). Хајде да препишемо функцију роунд_2() као ламбда функцију и користимо је са доле описаном функцијом мап().

nums_sqrt_round_l =list(map(lambda num:round(num,2),nums_sqrt))
print(nums_sqrt_round_l)

Као што се види у наставку, излаз је идентичан ономе што смо добили коришћењем функције роунд_2().

Output
[5.48, 9.49, 5.83, 6.71, 9.85]

Како користити функцију мап() са вишеструким итераблес

У примерима које смо видели, применили смо функцију на све ставке тачно једног итерабле.

Понекад можемо имати функције које узимају два или више аргумената. У овом случају, сваки аргумент се чува у листи или било којој сличној колекцији.

Такође можемо користити функцију Питхон мап() са више листа.

#1. Размотрите следећу функцију ареа() која прихвата дужину и ширину као улазе и враћа површину, дужину*ширину.

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

Дужина и ширина различитих правоугаоника се чувају у две одвојене листе, дужине и ширине, респективно.

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

Можемо да користимо функцију мап() да применимо функцију ареа на горенаведеним листама тако што ћемо проследити и листе дужина и ширина.

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

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

Output
[36, 32, 60, 198]

#2. Питхон математички модул има функцију дневника која нам помаже да израчунамо логаритам броја према било којој бази.

Напомена: лог(к, басе) враћа вредност лог к ​​на основу наведену базом вредности, лог басе к. Ако база није наведена, подразумевана основна вредност је е (лог израчунава природни логаритам).

У овом примеру:

  • Листа к одговара вредностима за које желите да израчунате логаритам.
  • Основна листа садржи све основне вредности које ће се користити у израчунавању логаритма.
x = [2,6,12,10]
base = [2,3,2,5]

Можемо користити функцију Питхон мап() са матх.лог, листама, к и базом да бисмо добили нову листу лог_к, како следи.

log_x = list(map(math.log,x,base))
print(log_x)

Ево излаза.

Output
[1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]

Закључак

Ево резимеа онога што сте научили у овом водичу:

  • Функција Питхон мап() узима најмање два аргумента: функцију и итерабле, са синтаксом мап(фунцтион, итерабле(с)).
  • Функција може бити било која важећа Питхон функција која се може позвати.
  • Када функција узме к аргумената, користите функцију мап() са функцијом и сваким од к аргумената у итерабле.

Затим научите да радите са скуповима у Питхон-у.