Funcția Python map(), explicată cu exemple

În acest tutorial, veți învăța cum să utilizați funcția Python map() pentru a aplica o funcție pe toate elementele unui iterabil.

Python acceptă paradigma de programare funcțională care vă permite să definiți sarcinile ca calcul al funcțiilor în mod programatic. Puteți trata funcțiile Python ca obiecte: o funcție poate lua o altă funcție ca parametru și poate returna o altă funcție.

Funcția map() preia o funcție ca argument și vă permite să o aplicați tuturor elementelor dintr-o secvență.

Până la sfârșitul acestui tutorial, veți putea folosi funcția Python map() – pentru a rescrie bucle detaliate și a enumera înțelegeri. Veți codifica mai multe exemple pentru a înțelege diferitele moduri în care puteți utiliza funcția map().

Cum se aplică o funcție la elementele unei liste Python

Să începem discuția noastră cu un exemplu.👩‍🏫

Aici nums este o listă de numere.

nums = [2,4,3,7]

Apoi, luați în considerare funcția self_pow(). Funcția self_pow() ia un număr ca argument și returnează numărul ridicat la puterea numărului însuși: n**n.

În Python, ** este operatorul de exponențiere. a**b returnează valoarea lui a ridicată la puterea b, ab.

def self_pow(n):
  return n**n

DE FĂCUT: Pentru a crea o nouă listă nums_pow prin aplicarea funcției self_pow() la fiecare element din lista nums.

Folosind for Loop

Pentru a face acest lucru, puteți utiliza buclele for în Python:

  • Pentru fiecare număr din lista de numere, apelați funcția self_pow() cu num ca argument.
  • Adăugați rezultatul apelului de funcție la noua listă nums_pow.
nums_pow = []

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

print(nums_pow)

În ieșire, fiecare număr nums este ridicat la sine. Elementele din lista nums_pow sunt următoarele: 22, 44, 33,77.

Output
[4, 256, 27, 823543]

Utilizarea listei de înțelegere

Puteți face acest lucru concis folosind înțelegerea listei. Din bucla for explicită de mai sus, putem identifica expresia de ieșire și lista prin care să trecem în buclă.

Apoi putem modifica expresia generică de înțelegere a listei:

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

Expresia de înțelegere a listei pentru a genera lista nums_pow este următoarea:

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

Ieșirea este aceeași cu cea din utilizarea buclelor for, așa cum era de așteptat.

Output
[4, 256, 27, 823543]

În loc de înțelegerea buclei și a listei, puteți utiliza funcția Python map() cu o sintaxă concisă și vă ajută să aplicați funcția tuturor elementelor dintr-un iterabil. Să începem prin a învăța sintaxa funcției map.

Python map() Sintaxa funcției

Sintaxa generală pentru a utiliza funcția Python map() este următoarea:

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

Funcția map() preia cel puțin două argumente, o funcție și un iterabil.

În sintaxa de mai sus:

  • funcția denotă o funcție Python sau, în general, orice Python apelabil. Aceasta include funcții definite de utilizator și încorporate, clase, metode de instanță și de clasă și multe altele.
  • iterabil este orice iterabil Python valid, cum ar fi o listă, tuplu și șir.
  • Funcția map() se aplică, iar funcția este utilizată pentru fiecare element din iterabil.

Ce returnează funcția map()?

Returnează un obiect hartă. Puteți apoi proiecta obiectul hartă într-o listă folosind sintaxa: list(map(function,iterable)).

În funcție de cazul de utilizare, îl puteți transforma într-un tuplu Python.

Acum că ați învățat sintaxa funcției Python map(), să începem să codificăm exemple.

Ar trebui să aveți Python 3.x pe care să îl urmați împreună cu acest tutorial. În caz contrar, puteți rula fragmentele de cod în editorul online Python tipstrick.ro.

Cum se utilizează funcția map() cu funcții definite de utilizator

#1. Anterior, am aplicat funcția self_pow() fiecărui număr din lista de numere. În sintaxa pentru funcția map(), putem trece funcția self_pow și numerele listei ca argumente.

Notă: trebuie să specificați doar numele funcției și nu un apel de funcție. Folosiți self_pow și nu self_pow().

Funcția map() returnează un obiect map.

print(map(self_pow,nums))

<map object at 0x7f7d315c14d0>

Apoi putem arunca obiectul hartă într-o listă folosind funcția list(), așa cum se arată mai jos.

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

Iată rezultatul în care fiecare num în nums este mapat la numnum în lista nums_pow.

Output
[4, 256, 27, 823543]

#2. Luați în considerare următoarea funcție inch_to_cm() care convertește inci în centimetri. 1 inch = 2,54 cm.

def inch_to_cm(inch):
  return inch*2.54

Pentru a converti valorile inci din lista de inci în centimetri, puteți utiliza funcția map() așa cum se arată în celula de cod de mai jos.

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

Lista cms conține valorile inci exprimate în centimetri.

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

Cum se utilizează funcția map() cu funcții încorporate

În această secțiune, vom învăța cum să folosim map() cu funcții încorporate în Python.

#1. Șirurile de listă sunt o listă de limbaje de programare. Doriți să creați o nouă listă strings_upper care conține șirurile limbajului de programare în majuscule.

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

Metoda de șir încorporată .upper() acționează asupra unui șir și returnează o copie formatată cu majuscule.

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

Lista strings_upper include șiruri în șirurile de listă formatate cu majuscule.

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

#2. Funcția len() încorporată în Python preia o secvență ca argument și returnează lungimea acesteia. Pentru a găsi lungimea fiecărui șir din lista de șiruri, putem folosi funcția map() și putem aplica funcția de lungime pe fiecare șir, așa cum se arată mai jos.

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

#3. Puteți utiliza funcția map() cu alte colecții, cum ar fi tuplurile.

Următorul exemplu conține un tuplu care conține informații despre numărul de dormitoare, zona și orașul în care se află o casă.

În Python, funcția type() returnează tipul de date al oricărui obiect Python. Pentru a obține tipul de date al tuturor elementelor din acest tuplu, puteți utiliza funcția map() pentru a apela funcția de tip pentru fiecare element tuplu.

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

Am turnat obiectul hartă într-un tuplu. De asemenea, puteți proiecta într-o listă sau în orice altă colecție.

În rezultatul de mai jos, vedem că tipurile de date 2, 758.5 ​​și Bangalore au fost deduse ca „int”, „float” și, respectiv, „str”.

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

#4. În Python, puteți importa module încorporate și puteți utiliza funcțiile definite în module.

Pentru a calcula rădăcina pătrată a fiecărui număr din lista de numere, puteți utiliza funcția rădăcină pătrată sqrt din modulul de matematică.

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]

Ieșirea de mai sus este dificil de analizat și urmărit. Poate doriți să rotunjiți fiecare valoare a rădăcinii pătrate pentru a spune două zecimale.

Cum să rotunjiți un număr cu virgulă mobilă în Python

Să definim o funcție round_2() care ia o valoare în virgulă mobilă și o rotunjește la două zecimale.

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

Acum, puteți utiliza funcția map() cu lista round_2 și 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]

De asemenea, puteți utiliza funcții map() imbricate, în care funcția map interioară este utilizată pentru a calcula lista rădăcină pătrată nums_sqrt, iar funcția map exterioară efectuează operația de rotunjire.

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]

Rezultatele sunt identice în ambele abordări de mai sus. Cu toate acestea, ar trebui să vă asigurați că codul este ușor de citit și de întreținut atunci când funcțiile de imbricare sunt prezentate mai sus.

Cum se utilizează funcția map() cu funcții Lambda

În secțiunile anterioare, ați învățat cum să utilizați funcția Python map() cu funcții încorporate și definite de utilizator. Acum veți învăța cum să utilizați funcția map() cu funcții lambda, care sunt anonime în Python.

Uneori, veți avea o funcție al cărei corp conține doar o linie de cod și poate fi necesar să utilizați funcția o singură dată și să nu o faceți referire în altă parte a programului. Puteți defini astfel de funcții ca o funcție lambda în Python.

Notă: lambda args: expression este sintaxa generală pentru a utiliza o funcție lambda Python.

#1. Luați în considerare următoarele șiruri de listă. Să presupunem că doriți să obțineți o listă strings_rev – care conține o copie inversată a fiecărui șir.

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

Putem inversa un șir Python folosind string slicing.

Notă: Aceasta este o generalizare a expresiei str[start:stop:step].

– Fără valorile start și stop, felia începe la începutul șirului și se extinde până la sfârșitul șirului.
– Valorile negative ale pasului dau felii începând de la sfârșitul șirului.
– Prin urmare, str[::-1] returnează o copie inversată a str.

Puteți utiliza această funcție lambda: lambda x:x[::-1]În interiorul funcției hărții, așa cum se arată mai jos.

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

Ca și în alte exemple, aruncăm obiectul hartă într-o listă. În rezultat, vedem că fiecare dintre șirurile din șirurile listei a fost inversat.

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

#2. În secțiunea anterioară, am calculat rădăcina pătrată a fiecărui număr din lista de numere și apoi am rotunjit fiecare valoare a rădăcinii pătrate la două zecimale.

Am folosit funcția round_2() pentru a face acest lucru. Să rescriem funcția round_2() ca o funcție lambda și să o folosim cu funcția map() descrisă mai jos.

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

După cum se vede mai jos, rezultatul este identic cu ceea ce am obținut din utilizarea funcției round_2().

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

Cum se utilizează funcția map() cu mai multe iterabile

În exemplele pe care le-am văzut, am aplicat o funcție pe toate articolele exact unui iterabil.

Uneori, putem avea funcții care preiau două sau mai multe argumente. În acest caz, fiecare argument este stocat într-o listă sau într-o colecție similară.

De asemenea, putem folosi funcția Python map() cu mai multe liste.

#1. Luați în considerare următoarea funcție area() care acceptă lungimea și lățimea ca intrări și returnează zona, lungime*lățime.

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

Lungimea și lățimea diferitelor dreptunghiuri sunt stocate în două liste separate, lungimi și, respectiv, lățimi.

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

Putem folosi funcția map() pentru a aplica funcția de zonă pe listele de mai sus, trecând atât listele de lungimi, cât și de lățimi.

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

Deoarece zona de funcții acceptă două argumente, valorile lungimii și lățimii sunt utilizate din listele lungimi lățimi, respectiv.

Output
[36, 32, 60, 198]

#2. Modulul de matematică Python are funcția de jurnal care ne ajută să calculăm logaritmul unui număr la orice bază.

Notă: log(x, bază) returnează valoarea log x la baza specificată de baza valorii, log baza x. Dacă baza nu este specificată, valoarea implicită de bază este e (log calculează logaritmul natural).

În acest exemplu:

  • Lista x corespunde valorilor pentru care doriți să calculați logaritmul.
  • Lista de bază conține toate valorile de bază care trebuie utilizate în calculul logaritmului.
x = [2,6,12,10]
base = [2,3,2,5]

Putem folosi funcția Python map() cu math.log, listele, x și base pentru a obține noua listă log_x, după cum urmează.

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

Iată rezultatul.

Output
[1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]

Concluzie

Iată un rezumat a ceea ce ați învățat în acest tutorial:

  • Funcția Python map() preia cel puțin două argumente: o funcție și un iterabil, cu sintaxa map(function, iterable(s)).
  • Funcția poate fi orice apel Python valid.
  • Când funcția preia k argumente, utilizați funcția map() cu funcția și fiecare dintre k argumente într-un iterabil.

Apoi, învață să lucrezi cu seturi în Python.