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șiif. 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ă deNone; 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ă.