Lecții din modul (1/4)
Liste de înțelegere
O comprehensiune de listă este o expresie care construiește o listă prin aplicare
o transformare (și opțional un filtru) într-un iterabil. Este
Mod pitonic de a scrie for + append pe o singură linie.
# stile imperativo (verboso)
quadrati = []
for n in range(5):
quadrati.append(n * n)
# stile pythonico
quadrati = [n * n for n in range(5)]
# [0, 1, 4, 9, 16]Sintaxă completă
[espressione for elemento in iterabile if condizione]- expresie: ce să puneți în lista rezultată
- pentru element în iterabil: buclă sursă
- of condition (opțional): păstrează doar elementele care se potrivesc
pari = [n for n in range(10) if n % 2 == 0]
# [0, 2, 4, 6, 8]
maiuscole = [p.upper() for p in ["ciao", "mondo"]]
# ['CIAO', 'MONDO']
lunghe = [p for p in ["a", "bb", "ccc", "dddd"] if len(p) >= 3]
# ['ccc', 'dddd']dacă/altfel în interiorul expresiei (ternar)
Pentru a transforma condiționat (în loc să filtrați), utilizați ternarul
expresie ÎNAINTE de for:
[n if n > 0 else 0 for n in [-2, -1, 0, 1, 2]]
# [0, 0, 0, 1, 2]Multi-pentru: produs cartezian
Puteți imbrica mai multe clauze for:
coppie = [(x, y) for x in range(3) for y in range(2)]
# [(0,0), (0,1), (1,0), (1,1), (2,0), (2,1)]Ordinea clauzelor for este „exterior-înainte-interior”, ca și cum ar fi
bucle imbricate.
Când NU să folosești o înțelegere
- Logica complexă cu multe ramuri
if/elseimbricate → utilizați o buclă explicită. - Efecte secundare (printare, scrieri în fișiere) → buclă, nu înțelegere.
- Mai mult de 2 nivele imbricate → o buclă denumită explicită este aproape întotdeauna mai bună.
Liste de înțelegeri imbricate
Puteți înlănțui mai multe bucle for într-o singură listă de înțelegere. De exemplu, pentru a aplatiza o matrice (o listă de liste) într-o singură listă plată, puteți scrie:
matrix = [[1, 2], [3, 4]]
flat = [item for row in matrix for item in row]
# result: [1, 2, 3, 4]Ordinea buclelor reflectă exact ordinea de imbricare a buclelor tradiționale for.
Încearcă
Având în vedere `nums = [1, 2, 3, 4, 5, 6]`, construiți `even_squares` cu pătratele doar ale numerelor pare. Evaluați `patratele_pare`.
Afișează indiciu
dacă n % 2 == 0 la sfârşit.
Soluție disponibilă după 3 încercări
Exercițiu de revizuire
Având în vedere `words = ['Ciao', 'Mondo', 'Python', 'Java']`, construiți `lengths` cu lungimea FIECĂRUI cuvânt și `short_words` numai cu cuvintele mai scurte de 5 caractere. Evaluați `(lungimi, cuvinte_scurte)`.
Afișează indiciu
Două înțelegeri separate.
Soluție disponibilă după 3 încercări
Provocare suplimentară
Use a list comprehension to calculate the squares of only the even integers between 1 and 10 inclusive. Store the list in `even_squares` and evaluate it.
Afișează indiciu
Utilizați interval (1, 11) pentru a repeta, dacă x % 2 == 0 pentru a filtra și x**2 ca expresie.
Soluție disponibilă după 3 încercări