List comprehension în Python

Construiește o listă nouă dintr-o altă colecție, într-un singur rând.

Sintaxă
[expresie for element in iterabil if conditie]

Ce face List comprehension

O list comprehension combină o buclă for și, opțional, un if într-o expresie între paranteze drepte. Pentru fiecare element care trece de condiție, rezultatul expresiei intră în lista nouă.

Aceeași sintaxă funcționează pentru dicționare ({k: v for ...}), mulțimi ({x for ...}) și generatoare ((x for ...)). Un generator nu construiește toată lista în memorie, ci produce valorile pe rând.

Exemple

Exemplul 1: Transformare și filtrare

numere = [1, 2, 3, 4, 5, 6, 7, 8]
patrate = [n * n for n in numere]
pare = [n for n in numere if n % 2 == 0]
print(patrate)
print(pare)

Rezultat

[1, 4, 9, 16, 25, 36, 49, 64]
[2, 4, 6, 8]

Exemplul 2: Pe texte

nume = ["  ana ", "MIHAI", "ioana  "]
curate = [n.strip().capitalize() for n in nume]
print(curate)
lungimi = [len(n) for n in curate]
print(lungimi)

Rezultat

['Ana', 'Mihai', 'Ioana']
[3, 5, 5]

Exemplul 3: Dicționar, mulțime și generator

preturi = {"pâine": 4.5, "lapte": 7, "cafea": 32.9}
cu_tva = {produs: round(pret * 1.21, 2) for produs, pret in preturi.items()}
print(cu_tva)

litere = {c for c in "banana"}
print(sorted(litere))

print(sum(n * n for n in range(1, 11)))

Rezultat

{'pâine': 5.45, 'lapte': 8.47, 'cafea': 39.81}
['a', 'b', 'n']
385

Greșeli frecvente

  • Scrii o comprehension foarte lungă, cu mai multe for și if. Devine greu de citit; o buclă normală este mai clară.
  • Folosești o comprehension doar pentru efecte (de exemplu [print(x) for x in lista]). Construiești o listă inutilă de None; folosește o buclă for.

Comenzi înrudite

  • for: Parcurge, pe rând, fiecare element dintr-o listă, text, dicționar sau alt obiect iterabil.
  • list (liste): Lista este o colecție ordonată și modificabilă de elemente, scrisă între paranteze drepte.
  • map(): Aplică o funcție fiecărui element dintr-o colecție.
  • filter(): Păstrează doar elementele pentru care o funcție returnează o valoare adevărată.