Introducere
În această lecție, vom explora în detaliu funcționalitatea extinsă a funcțiilor map și filter în Python. Aceste funcții sunt esențiale pentru programare funcțională și sunt utilizate pentru a procesa și transforma colecții de date fără a modifica datele originale. Vom examina diverse exemple și scenarii de utilizare și vom învăța cum să folosim map și filter în combinație cu funcțiile lambda și funcțiile definite.
Cuprins
- Recapitulare: Ce sunt funcțiile
map()șifilter()în Python - Utilizarea funcțiilor
map()șifilter()cu funcții definite - Funcțiile
map()șifilter()cu liste de argumente - Combinarea funcționalității
map()șifilter() - Înlocuirea funcțiilor
map()șifilter()cu list comprehensions și generator expressions - Utilizarea funcției
reduce()în combinație cumap()șifilter() - Încheiere și concluzii
1. Recapitulare: Ce sunt funcțiile map() și filter() în Python
Funcțiile map() și filter() sunt funcții de înaltă ordine care permit procesarea și transformarea colecțiilor de date într-un mod funcțional.
map(funcție, colecție): Aplică o funcție la fiecare element dintr-o colecție și returnează un obiect mapă. Acest obiect poate fi convertit într-o listă sau altă colecție.filter(funcție, colecție): Aplică o funcție la fiecare element dintr-o colecție și păstrează doar acele elemente care îndeplinesc o condiție. Funcția trebuie să returneze un rezultat de tip boolean. Funcțiafilter()returnează un obiect filtru, care poate fi convertit într-o listă sau altă colecție.
2. Utilizarea funcțiilor map() și filter() cu funcții definite
În loc să folosim funcții lambda, putem utiliza funcții definite în combinație cu map() și filter(). Acest lucru este util atunci când avem o funcție care este prea complexă pentru a fi exprimată ca o funcție lambda.
De exemplu, să definim o funcție care calculează pătratul unui număr și să o folosim cu map():
def patrat(x):
return x ** 2
numere = [1, 2, 3, 4, 5]
patrate = list(map(patrat, numere))
print(patrate) # Output: [1, 4, 9, 16, 25]
În mod similar, să definim o funcție care verifică dacă un număr este par și să o folosim cu filter():
def este_par(x):
return x % 2 == 0
numere = [1, 2, 3, 4, 5]
numere_pare = list(filter(este_par, numere))
print(numere_pare) # Output: [2, 4]
3. Funcțiile map() și filter() cu liste de argumente
Funcția map() poate fi utilizată cu mai multe liste de argumente. În acest caz, funcția primită de map() trebuie să aibă un număr de parametri egal cu numărul de liste de argumente.
De exemplu, să adunăm elementele a două liste folosind map():
lista1 = [1, 2, 3, 4, 5]
lista2 = [6, 7, 8, 9, 10]
def adunare(x, y):
return x + y
rezultat = list(map(adunare, lista1, lista2))
print(rezultat) # Output: [7, 9, 11, 13, 15]
4. Combinarea funcționalității map() și filter()
Funcțiile map() și filter() pot fi combinate pentru a crea operații mai complexe. De exemplu, să aplicăm o funcție la toate elementele dintr-o listă și să păstrăm doar acele elemente care îndeplinesc o anumită condiție:
numere = [1, 2, 3, 4, 5]
def dublu(x):
return x * 2
def este_impar(x):
return x % 2 == 1
# Aplicăm funcția dublu la toate elementele și păstrăm doar elementele impare
rezultat = list(filter(este_impar, map(dublu, numere)))
print(rezultat) # Output: [2, 6, 10]
5. Înlocuirea funcțiilor map() și filter() cu list comprehensions și generator expressions
Python oferă o sintaxă alternativă pentru a realiza operații similare cu map() și filter(): list comprehensions și generator expressions. Acestea sunt mai ușor de citit și înțeles în unele cazuri.
De exemplu, putem înlocui funcția map() cu o list comprehension:
numere = [1, 2, 3, 4, 5]
patrate = [x ** 2 for x in numere]
print(patrate) # Output: [1, 4, 9, 16, 25]
Similar, putem înlocui funcția filter() cu o list comprehension:
numere = [1, 2, 3, 4, 5]
numere_pare = [x for x in numere if x % 2 == 0]
print(numere_pare) # Output: [2, 4]
Pentru a economisi memorie, putem utiliza generator expressions în loc de list comprehensions:
numere = [1, 2, 3, 4, 5]
patrate = (x ** 2 for x in numere)
print(list(patrate)) # Output: [1, 4, 9, 16, 25]
6. Utilizarea funcției reduce() în combinație cu map() și filter()
Funcția reduce() este o altă funcție de înaltă ordine care poate fi utilizată în combinație cu map() și filter(). Aceasta permite aplicarea unei funcții care acceptă două argumente în mod repetat la elementele unei colecții, până când colecția este redusă la o singură valoare.
Funcția reduce() a fost mutată în modulul functools începând cu Python 3, așa că trebuie să o importăm înainte de a o utiliza:
from functools import reduce
numere = [1, 2, 3, 4, 5]
def adunare(x, y):
return x + y
suma = reduce(adunare, numere)
print(suma) # Output: 15
7. Încheiere și concluzii
În această lecție, am explorat funcționalitatea extinsă a funcțiilor map() și filter() în Python. Am învățat cum să folosim aceste funcții cu funcții definite și lambdas, cum să combinăm funcționalitatea lor, cum să le înlocuim cu list comprehensions și generator expressions și cum să le utilizăm împreună cu funcția reduce().
Utilizarea map(), filter() și a altor funcții de înaltă ordine poate duce la un cod mai curat, mai ușor de înțeles și mai ușor de întreținut. Cu toate acestea, este important să alegem abordarea potrivită în funcție de necesitățile și complexitatea problemei pe care încercăm să o rezolvăm. În unele cazuri, list comprehensions și generator expressions pot fi o alternativă mai potrivită.