Post

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

This post is licensed under CC BY 4.0 by the author.