Funcția Python map(), explicată cu exemple
Publicat: 2022-08-25Î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 sarcini ca un 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 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, a b .
def self_pow(n): return n**n
TO-DO : Pentru a crea o nouă listă
nums_pow
prin aplicarea funcțieiself_pow()
la fiecare element din listanums
.
Folosind for Loop
Pentru a face acest lucru, puteți utiliza buclele for în Python:
- Pentru fiecare număr din lista de
nums
, apelați funcțiaself_pow()
cunum
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: 2 2 , 4 4 , 3 3 ,7 7 .
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țelegere în buclă și listă, puteți utiliza funcția Python map()
cu o sintaxă concisă care ajută la aplicarea funcției tuturor elementelor dintr-un iterabil. Să începem prin a învăța sintaxa funcției map.
Python map() Sintaxa funcției

Sintaxa generală de utilizat Funcția Python map()
este după cum urmează:
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() aplică funcția fiecărui 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 Geekflare.
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 nums
. În sintaxa pentru funcția map()
, putem trece funcția self_pow
și nums
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 num num î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 inches
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 . strings
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
.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 strings
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 strings
, 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 type
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 nums
, 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 imbricate map()
, în care funcția map interioară este utilizată pentru a calcula list nums_sqrt
, iar funcția map exterioară realizează 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 funcția 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 strings
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 de tăiere a șirurilor de caractere
str[start:stop:step]
.– Fără valorile
start
șistop
, felia începe la începutul șirului și se extinde până la sfârșitul șirului.
– Valorile negative alestep
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 de hartă, 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ă length
și breadth
ca intrări și returnează zona, length*breadth
.
def area(length,breadth): return length*breadth
Lungimea și lățimea diferitelor dreptunghiuri sunt stocate în două liste separate, lengths
și, respectiv, breadths
.
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 lengths
, cât și de breadths
.
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 lengths
breadths
, respectiv.
Output [36, 32, 60, 198]
#2 . Modulul de matematică Python are funcția log 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, baza log 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
base
conține toate valorile de bază care vor fi 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.