Salt la conținutul principal
Modulul 6 · Lecția 4 din 424/36 în curs~12 min
Lecții din modul (4/4)

Instrumente esențiale

Python expune o mulțime de instrumente de iterație: unele sunt încorporate (întotdeauna disponibil), alții trăiesc în modulul itertools al standardului bibliotecă. Iată cele mai importante.

enumerate: index + valoare

Când aveți nevoie atât de index, cât și de element în timpul unei bucle:

Python
for i, parola in enumerate(["a", "b", "c"]):
    print(i, parola)
# 0 a
# 1 b
# 2 c

# parte da un altro numero:
for i, parola in enumerate(["a", "b", "c"], start=1):
    print(i, parola)

zip: repetați în paralel

Combină mai multe iterabile element cu element:

Python
nomi = ["Ada", "Linus", "Grace"]
eta = [36, 54, 85]

for n, e in zip(nomi, eta):
    print(f"{n} ha {e} anni")

zip se oprește la cel mai scurt iterabil. Pentru o utilizare „lungă” a fermoarului itertools.zip_longest.

Construirea unui dict din două liste paralele:

Python
dict(zip(nomi, eta))
# {'Ada': 36, 'Linus': 54, 'Grace': 85}

itertools.chain: concatenează iterabile

Python
from itertools import chain
list(chain([1, 2], [3, 4], [5]))
# [1, 2, 3, 4, 5]

Fără a crea o listă intermediară: util pentru fișiere, generatoare etc.

itertools.count și repeat: iteratoare infinite

Python
from itertools import count, repeat

# count(start, step) — interi crescenti infiniti
for i in count(10, 2):
    if i > 20: break
    print(i)
# 10, 12, 14, 16, 18, 20

# repeat(x, n) — ripete lo stesso valore n volte (o all'infinito senza n)
list(repeat("ok", 3))   # ['ok', 'ok', 'ok']

itertools.combinations

Toate combinațiile (fără repetări, independente de ordine) ale unui dat lungime:

Python
from itertools import combinations
list(combinations([1, 2, 3, 4], 2))
# [(1,2), (1,3), (1,4), (2,3), (2,4), (3,4)]

Varianta comandată: permutations. Variante cu repetare: combinations_with_replacement și product.

zip() pentru dicționare și iterabile neechilibrate

Funcția zip() se oprește imediat ce cea mai scurtă intrare iterabilă este epuizată. Dacă doriți să asociați elemente și să păstrați toate valorile în exces (completându-le cu o valoare implicită precum None), puteți utiliza zip_longest() din modulul itertools. În plus, puteți transmite un rezultat zip direct către dict() pentru a crea instantaneu o hartă cheie-valoare.

Încearcă

Exercițiu#python.m6.l4.e1
Încercări: 0Se încarcă…

Având în vedere listele paralele `țări = ['Italia', 'Francia', 'Spagna']` și `capitale = ['Roma', 'Parigi', 'Madrid']`, construiți `mapping` ca un dict {țara: capitala}. Evaluați „mapping”.

Se încarcă editorul...
Afișează indiciu

dict(zip(țări, capitale))

Soluție disponibilă după 3 încercări

Exercițiu de revizuire

Exercițiu#python.m6.l4.e2
Încercări: 0Se încarcă…

Având în vedere `words = ['ciao', 'mondo', 'python']`, construiți `enumerated_items` ca o listă de tupluri (i, cuvânt) începând de la i=1. Evaluați `articole_enumerate`.

Se încarcă editorul...
Afișează indiciu

enumerate(cuvinte, start=1) → (i, valoare) tupluri.

Soluție disponibilă după 3 încercări

Provocare suplimentară

Exercițiu#python.m6.l4.e3
Încercări: 0Se încarcă…

Given two lists `keys = ['a', 'b', 'c']` and `values = [10, 20, 30]`, use `zip` to pair them and convert the result into a dictionary. Store the resulting dictionary in `my_dict` and evaluate it.

Se încarcă editorul...
Afișează indiciu

Folosiți dict(zip(chei, valori)) și atribuiți-l la my_dict.

Soluție disponibilă după 3 încercări