Introduzione

enumerate() è una funzione integrata in Python che ti consente di avere un contatore automatico mentre esegui il ciclo su iterabili.

Funzione Python enumerate()

La funzione enumerate() assume la forma seguente:

enumerate(iterable, start=0)

La funzione accetta due argomenti:

  • iterable - Un oggetto che supporta l'iterazione.
  • start - Il numero da cui inizia il contatore. Questo argomento è facoltativo. Per impostazione predefinita, il contatore inizia da 0.

enumerate() restituisce un oggetto enumerato su cui è possibile chiamare il metodo __next__()(o next() in Python 2) per ottenere una tupla contenente un conteggio e il valore corrente dell'iterabile.

Ecco un esempio di come creare un elenco di tuple usando list() e come eseguire il loop su un iterabile:

directions = ["north", "east", "south", "west"] 
list(enumerate(directions))

for index, value in enumerate(directions): 
    print("{}: {}".format(index, value))
[(0, 'north'), (1, 'east'), (2, 'south'), (3, 'west')]

0: north
1: east
2: south
3: west

Se l'indicizzazione in base zero non funziona per te, scegli un altro indice iniziale per l'enumerazione:

directions = ["north", "east", "south", "west"] 
list(enumerate(directions, 1))
[(1, 'north'), (2, 'east'), (3, 'south'), (4, 'west')]

La funzione enumerate() funziona su qualsiasi oggetto iterabile. Un iterabile è un contenitore che può essere ripetuto. Mettendolo in parole semplici, significa un oggetto su cui puoi passare un ciclo for. La maggior parte degli oggetti incorporati in Python come stringhe, elenchi e tuple sono iterabili.

Scrivere codice Pythonic con enumerate()

Il loop for di Python è totalmente diverso dal tradizionale loop for in stile C disponibile in molti linguaggi di programmazione. Il loop for in Python equivale al loop foreach di altri linguaggi.

Una tecnica comune utilizzata dai nuovi sviluppatori Python per ottenere l'indice corrispondente quando si tratta di iterabili è quella di utilizzare il modello range(len(...))  o impostare e incrementare un contatore:

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
for i in range(len(planets)):
    print("Planet {}: {}".format(i, planets[i]))
planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
i = 0
for planet in planets:
    print("Planet {}: {}".format(i, planet))
    i += 1

I loop sopra possono essere riscritti in modo più idiomatico usando enumerate():

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
for index, value in enumerate(planets): 
    print("Planet {}: {}".format(index, value))

Tutti i metodi produrranno lo stesso output:

Planet 0: Mercury
Planet 1: Venus
Planet 2: Earth
Planet 3: Mars
Planet 4: Jupiter
Planet 5: Saturn
Planet 6: Uranus
Planet 7: Neptune

Conclusione

In questo articolo, ti abbiamo mostrato come usare la funzione enumerate() di Python.