Saltar al contenido principal
eLearner.app
Módulo 6 · Lección 4 de 424/36 en el curso~12 min
Lecciones del módulo (4/4)

itertools essenziali

Python espone moltissimi tool di iterazione: alcuni sono built-in (sempre disponibili), altri vivono nel modulo itertools della standard library. Ecco i più importanti.

enumerate: indice + valore

Quando ti serve sia l'indice che l'elemento durante un loop:

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: iterare in parallelo

Combina più iterabili elemento per elemento:

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

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

zip si ferma all'iterabile più corto. Per zip "lungo" usa itertools.zip_longest.

Costruire un dict da due liste parallele:

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

itertools.chain: concatenare iterabili

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

Senza creare una lista intermedia: utile per file, generatori, ecc.

itertools.count e repeat: iteratori infiniti

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

Tutte le combinazioni (senza ripetizioni, ordine indifferente) di lunghezza data:

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

Variante con ordine: permutations. Variante con ripetizioni: combinations_with_replacement e product.

zip() per dizionari ed elementi spaiati

La funzione zip() si ferma non appena l'iterabile più corto si esaurisce. Se desideri accoppiare elementi mantenendo anche quelli in eccesso (riempiendoli con un valore di default come None), puoi usare zip_longest() importandola dal modulo itertools. In più, puoi passare un risultato di zip() direttamente a dict() per creare al volo una mappa chiave-valore.

Prova tu

Ejercicio#python.m6.l4.e1
Intentos: 0Cargando...

Date le liste parallele `countries = ['Italia', 'Francia', 'Spagna']` e `capitals = ['Roma', 'Parigi', 'Madrid']`, costruisci `mapping` come dict {paese: capitale}. Valuta `mapping`.

Cargando editor...
Mostrar pista

dict(zip(countries, capitals))

Solución disponible después de 3 intentos

Esercizio di ripasso

Ejercicio#python.m6.l4.e2
Intentos: 0Cargando...

Data `words = ['ciao', 'mondo', 'python']`, costruisci `enumerated_items` come lista di tuple (i, parola) partendo da i=1. Valuta `enumerated_items`.

Cargando editor...
Mostrar pista

enumerate(parole, start=1) → tuple (i, valore).

Solución disponible después de 3 intentos

Sfida aggiuntiva

Ejercicio#python.m6.l4.e3
Intentos: 0Cargando...

Date le due liste `keys = ['a', 'b', 'c']` e `values = [10, 20, 30]`, usa `zip` per accoppiarle e converte il risultato in un dizionario. Salva il dizionario risultante in `my_dict` e valutalo.

Cargando editor...
Mostrar pista

Usa dict(zip(keys, values)) ed assegnalo a my_dict.

Solución disponible después de 3 intentos