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:
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:
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:
dict(zip(nomi, eta))
# {'Ada': 36, 'Linus': 54, 'Grace': 85}itertools.chain: concatenează iterabile
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
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:
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ă
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”.
Afișează indiciu
dict(zip(țări, capitale))
Soluție disponibilă după 3 încercări
Exercițiu de revizuire
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`.
Afișează indiciu
enumerate(cuvinte, start=1) → (i, valoare) tupluri.
Soluție disponibilă după 3 încercări
Provocare suplimentară
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.
Afișează indiciu
Folosiți dict(zip(chei, valori)) și atribuiți-l la my_dict.
Soluție disponibilă după 3 încercări