List Comprehensions
Introducere
List comprehensions sunt o modalitate concisa de a crea liste in Python. Combina crearea listei cu iterarea intr-o singura linie.
Sintaxa de Baza
[expresie for element in iterabil]
Exemplu simplu:
# Metoda traditionala
patrate = []
for x in range(5):
patrate.append(x ** 2)
print(patrate) # [0, 1, 4, 9, 16]
# Cu list comprehension
patrate = [x ** 2 for x in range(5)]
print(patrate) # [0, 1, 4, 9, 16]
Cu Conditie (Filtrare)
[expresie for element in iterabil if conditie]
# Numere pare din range(10)
pare = [x for x in range(10) if x % 2 == 0]
print(pare) # [0, 2, 4, 6, 8]
# Patratele numerelor pare
patrate_pare = [x ** 2 for x in range(10) if x % 2 == 0]
print(patrate_pare) # [0, 4, 16, 36, 64]
Cu if-else (Transformare)
[expresie_true if conditie else expresie_false for element in iterabil]
# Inlocuieste impare cu 0
rezultat = [x if x % 2 == 0 else 0 for x in range(10)]
print(rezultat) # [0, 0, 2, 0, 4, 0, 6, 0, 8, 0]
# Par/Impar
etichete = ["par" if x % 2 == 0 else "impar" for x in range(5)]
print(etichete) # ['par', 'impar', 'par', 'impar', 'par']
Comprehensions Imbricate
# Matrice 3x3
matrice = [[i * 3 + j for j in range(3)] for i in range(3)]
print(matrice) # [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
# Aplatizare matrice
flat = [elem for rand in matrice for elem in rand]
print(flat) # [0, 1, 2, 3, 4, 5, 6, 7, 8]
Exemple Practice
# Cuvinte care incep cu 'a'
cuvinte = ["ana", "bob", "alice", "dan"]
cu_a = [c for c in cuvinte if c.startswith("a")]
# ['ana', 'alice']
# Lungimile cuvintelor
lungimi = [len(c) for c in cuvinte]
# [3, 3, 5, 3]
# Uppercase pentru cuvinte scurte
rezultat = [c.upper() if len(c) <= 3 else c for c in cuvinte]
# ['ANA', 'BOB', 'alice', 'DAN']
Performanta
List comprehensions sunt mai rapide decat buclele for echivalente pentru ca sunt optimizate intern.
Cand sa NU Folosesti
- Logica complexa - foloseste for normal
- Efecte secundare (side effects)
- Citibilitate redusa
Puncte Cheie pentru Examen
- Sintaxa:
[expr for x in iter] - Cu filtrare:
[expr for x in iter if cond] - Cu transformare:
[a if cond else b for x in iter] - if inainte de for = filtrare
- if dupa for (cu else) = transformare