Conținut curs
Gestionarea erorilor și excepțiilor
0/1
Python Intermediar
Despre lecție

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

  1. Recapitulare: Ce sunt funcțiile map() și filter() în Python
  2. Utilizarea funcțiilor map() și filter() cu funcții definite
  3. Funcțiile map() și filter() cu liste de argumente
  4. Combinarea funcționalității map() și filter()
  5. Înlocuirea funcțiilor map() și filter() cu list comprehensions și generator expressions
  6. Utilizarea funcției reduce() în combinație cu map() și filter()
  7. Î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ția filter() 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():

python
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():

python
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():

python
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:

python
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:

python
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:

python
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:

python
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:

python
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ă.