enumerate() vs range(len()): Il Modo Giusto di Iterare con Indici
enumerate() vs range(len()): Il Modo Giusto di Iterare con Indici
Quando usarlo
Ogni volta che devi iterare su una lista e ti serve anche l’indice dell’elemento corrente. Invece di usare il vecchio range(len()), enumerate() è più leggibile, più sicuro, e più “pythonic”. Perfetto per modificare liste, tracciare posizioni, o creare output numerati.
Snippet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
frutti = ['mela', 'banana', 'arancia', 'kiwi']
# Modo antiquato (da evitare)
for i in range(len(frutti)):
print(f"{i+1}. {frutti[i]}")
# Modo moderno e corretto
for i, frutto in enumerate(frutti, start=1):
print(f"{i}. {frutto}")
# Modificare elementi usando l'indice
numeri = [1, 2, 3, 4, 5]
for i, num in enumerate(numeri):
numeri[i] = num * 2 # raddoppia ogni elemento
Perché funziona
enumerate() restituisce coppie (indice, valore) senza rischi di errori off-by-one o IndexError. È più efficiente perché non calcola la lunghezza né accede agli elementi per indice. Il parametro start permette di iniziare da qualsiasi numero, e il codice risulta più leggibile e manutenibile.
Attenzione a…
- Non usare
list(enumerate())se non necessario - consuma memoria extra range(len())può causare IndexError se la lista cambia durante l’iterazione- Ricorda che
enumerate()restituisce un iterator - riutilizzalo o ricrealo
Vedi anche
zip()per iterare su multiple sequenzeitertools.count()per contatori personalizzati- Documentazione enumerate
This post is licensed under CC BY 4.0 by the author.