🐍

Comprehensions în Python

Programare Python Intermediar 1 min citire 0 cuvinte

Comprehensions în Python

Ce sunt Comprehensions?

Comprehensions sunt o sintaxă concisă pentru a crea colecții noi bazate pe iterabile existente.

List Comprehension

Forma de bază

# Metoda clasică
patrate = []
for x in range(5):
    patrate.append(x ** 2)
# [0, 1, 4, 9, 16]

# Cu list comprehension
patrate = [x ** 2 for x in range(5)]
# [0, 1, 4, 9, 16]

Cu condiție (filtru)

# Doar numerele pare
pare = [x for x in range(10) if x % 2 == 0]
# [0, 2, 4, 6, 8]

# Pătratele numerelor pare
patrate_pare = [x ** 2 for x in range(10) if x % 2 == 0]
# [0, 4, 16, 36, 64]

Cu expresie condițională

# Diferit de filtru - se aplică pe rezultat
rezultat = [x if x % 2 == 0 else -x for x in range(5)]
# [0, -1, 2, -3, 4]

Comprehension imbricat

# Matrice transpusă
matrice = [[1, 2, 3], [4, 5, 6]]
transpusa = [[row[i] for row in matrice] for i in range(3)]
# [[1, 4], [2, 5], [3, 6]]

# Aplatizare matrice
plat = [x for row in matrice for x in row]
# [1, 2, 3, 4, 5, 6]

Dictionary Comprehension

# Pătrate ca dicționar
patrate = {x: x**2 for x in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

# Inversare cheie-valoare
original = {"a": 1, "b": 2, "c": 3}
inversat = {v: k for k, v in original.items()}
# {1: 'a', 2: 'b', 3: 'c'}

# Cu condiție
d = {x: x**2 for x in range(10) if x % 2 == 0}
# {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}

Set Comprehension

# Caractere unice dintr-un șir
caractere = {c.lower() for c in "Hello World"}
# {'h', 'e', 'l', 'o', ' ', 'w', 'r', 'd'}

# Lungimi unice
cuvinte = ["ana", "ion", "maria", "dan"]
lungimi = {len(c) for c in cuvinte}
# {3, 5}

Generator Expression

Similar cu list comprehension, dar generează valori la cerere (lazy evaluation):

# List comprehension - creează lista imediat
lista = [x**2 for x in range(1000000)]  # Folosește memorie!

# Generator expression - generează pe măsură ce e nevoie
gen = (x**2 for x in range(1000000))  # Aproape zero memorie
print(next(gen))  # 0
print(next(gen))  # 1

# Folosit în funcții
suma = sum(x**2 for x in range(100))  # Fără [] pentru generator

Exemple Practice

Filtrare și transformare

note = [3, 7, 9, 4, 10, 6, 8]

# Notele de promovare, rotunjite
promovate = [round(n, 0) for n in note if n >= 5]
# [7, 9, 10, 6, 8]

Procesare șiruri

cuvinte = ["  Hello  ", "WORLD", "python"]
procesate = [c.strip().lower() for c in cuvinte]
# ['hello', 'world', 'python']

Crearea dicționarelor

chei = ["a", "b", "c"]
valori = [1, 2, 3]
dictionar = {k: v for k, v in zip(chei, valori)}
# {'a': 1, 'b': 2, 'c': 3}

De Reținut

Comprehensions sunt mai citibile și mai rapide decât buclele echivalente pentru operații simple. Pentru logică complexă, preferă buclele tradiționale.

Întrebări de Verificare

  1. Ce returnează [x**2 for x in range(5)]?
  2. Care este diferența dintre [x for x if ...] și [x if ... else ... for x]?
  3. Când folosești generator expression în loc de list comprehension?
  4. Cum creezi un dicționar cu comprehension?

Testează-ți Cunoștințele

📚 Articole Corelate