Articolo originale: List Index Out of Range – Python Error Message Solved

In questo articolo vedrai alcuni dei motivi per cui si verifica l'errore di Python list index out of range.

Oltre a sapere per quale motivo si verifica questo errore, imparerai anche alcuni modi per evitare che succeda.

Iniziamo!

Come Creare una Lista in Python

Per creare una lista in Python, devi:

  • Dare un nome alla lista,
  • Usare l'operatore di assegnamento, =,
  • e includere 0 o più elementi della lista all'interno delle parentesi quadre,[]. Ogni elemento della lista deve essere separato da una virgola.

Per esempio, per creare una lista di nomi puoi fare come segue:

nomi = ["Kelly", "Nelly", "Jimmy", "Lenny"]

Il codice qui sopra crea una lista chiamata nomi che contiene quattro valori: Kelly, Nelly, Jimmy, Lenny.

Come Verificare la Lunghezza di una Lista in Python

Per verificare la lunghezza di una lista in Python, usa il metodo integrato di Python len().

len() restituirà un numero intero, che rappresenta il numero di elementi contenuti nella lista.

nomi = ["Kelly", "Nelly", "Jimmy", "Lenny"]

# crea una variabile chiamata lunghezza_nomi per immagazzinare la lunghezza della lista
lunghezza_nomi = len(nomi)

# visualizza il valore della variabile nella console
print(lunghezza_nomi)

#output
#4

Ci sono quattro elementi nella lista, dunque la lunghezza della lista sarà di quattro.

Come Accedere ad Elementi Individuali della Lista in Python

Ogni elemento nella lista ha il suo indice numerico.

In Python, così come nella maggior parte dei linguaggi di programmazione moderni, l'indicizzazione inizia da 0.

Questo vuol dire che il primo elemento in una lista ha indice 0, il secondo ha indice 1, e così via.

Puoi usare l'indice per accedere ai singoli elementi.

Per accedere ad un elemento in una lista usando il suo indice numerico, prima di tutto scrivi il nome della lista. Poi, tra parentesi quadre, includi il numero intero che corrisponde all'indice dell'elemento.

Riprendendo l'esempio di prima, questo è il modo in cui puoi accedere ad ogni elemento all'interno della lista usando il suo indice:

nomi = ["Kelly", "Nelly", "Jimmy", "Lenny"]

nomi[0] # Kelly
nomi[1] # Nelly
nomi[2] # Jimmy
nomi[3] # Lenny

Puoi anche usare un'indicizzazione negativa per accedere agli elementi nelle liste di Python.

Per accedere all'ultimo elemento, userai il valore di indice -1. Per accedere al penultimo elemento, userai il valore di indice -2.

Ecco come puoi accedere ad ogni elemento all'interno di una lista usando l'indicizzazione negativa:

nomi = ["Kelly", "Nelly", "Jimmy", "Lenny"]

nomi[-4] # Kelly
nomi[-3] # Nelly
nomi[-2] # Jimmy
nomi[-1] # Lenny

Perché si verifica l'errore IndexError: list index out of range in Python?

Usando un indice fuori dai limiti della lista

Incorrerai nell'errore IndexError: list index out of range quando provi ad accedere ad un elemento usando un valore che è fuori dall'intervallo degli indici della lista e che perciò non esiste.

Ciò è molto comune quando provi ad accedere all'ultimo elemento della lista, o al primo se stai usando l'indicizzazione negativa.

Torniamo alla lista che abbiamo usato finora.

nomi = ["Kelly", "Nelly", "Jimmy", "Lenny"]

Mettiamo caso che io voglia accedere all'ultimo elemento, "Lenny", e provare a farlo usando il seguente codice:

print(nomi[4])

#output

#Traceback (most recent call last):
#  File "/Users/dionysialemonaki/python_articles/demo.py", line 3, in <module>
#    print(nomi[4])
#IndexError: list index out of range

In generale, l'intervallo di indici di una lista va da 0 a n-1, dove n è il numero totale dei valori della lista.

Con un valore totale di 4, l'intervallo di indici della lista in alto va da 0 a 3.

Ora, proviamo ad accedere a un elemento usando l'indicizzazione negativa.

Mettiamo caso che io voglia accedere al primo elemento della lista, "Kelly", usando l'indicizzazione negativa.

nomi = ["Kelly", "Nelly", "Jimmy", "Lenny"]

print(nomi[-5])

#output

#Traceback (most recent call last):
#  File "/Users/dionysialemonaki/python_articles/demo.py", line 3, in <module>
#    print(nomi[-5])
#IndexError: list index out of range

Quando si usa l'indicizzazione negativa, l'intervallo di indici di una lista va da -1 a -n, dove n è il numero totale di elementi contenuti nella lista.

Con un numero totale di elementi della lista uguale a 4, l'intervallo di indici andrà da -1 a -4.

Usando il valore errato nella funzione range() in un loop for di Python

Incorrerai nell'errore Indexerror: list index out of range iterando attraverso una lista e provando ad accedere ad un elemento che non esiste.

Una situazione comune in cui ciò si può verificare è quando viene passato il numero intero sbagliato alla funzione di Python range().

La funzione range() tipicamente prende un solo numero intero, che indica dove si fermerà il conteggio.

Per esempio, range(5) indica che il conteggio comincerà da 0 e finirà a 4.

Dunque, in automatico, il conteggio comincia dalla posizione 0, aumenta di 1 ogni volta, e arriva fino alla posizione specificata - non inclusa nel conteggio - dove si fermerà.

Prendiamo in considerazione il seguente esempio:

nomi = ["Kelly", "Nelly", "Jimmy", "Lenny"]

for nome in range(5):
    print(nomi[nome])
    
#output

#Kelly
#Nelly
#Jimmy
#Lenny
#Traceback (most recent call last):
#  File "/Users/dionysialemonaki/python_articles/demo.py", line 7, in <module>
#   print(nomi[nome])
#IndexError: list index out of range

Qui la lista nomi ha quattro valori.

Volevo iterare attraverso la lista e visualizzare ogni valore.

Quando ho usato range(5) stavo dicendo all'interprete di Python di visualizzare i valori che si trovano alle posizioni da 0 a 4.

Tuttavia, non c'è nessun elemento alla posizione 4.

Puoi osservarlo meglio visualizzando prima il numero della posizione e poi il valore che si trova in quella posizione.

#0
#Kelly
#1
#Nelly
#2
#Jimmy
#3
#Lenny
#4
#Traceback (most recent call last):
#  File "/Users/dionysialemonaki/python_articles/demo.py", line 8, in <module>
#    print(nomi[nome])
#IndexError: list index out of range

Osserva che alla posizione 0 c'è "Kelly", alla posizione 1 c'è "Nelly", alla posizione 2 c'è "Jimmy" e alla posizione 3 c'è "Lenny".

Per quanto riguarda la posizione 4, che è stata specificata con range(5), che indica le posizioni da 0 a 4, non c'è nulla da visualizzare e quindi l'interprete restituirà un errore.

Un modo per risolvere questo problema è ridurre il numero passato a range():

nomi = ["Kelly", "Nelly", "Jimmy", "Lenny"]

for nome in range(4):
    print(nome)
    print(nomi[nome])
    
#output

#0
#Kelly
#1
#Nelly
#2
#Jimmy
#3
#Lenny

Un altro modo per risolvere questo problema, quando usiamo un loop for, è passare la lunghezza della lista come argomento della funzione range() . Puoi farlo usando la funzione integrata di Python len(), come è stato mostrato in una sezione precedente:

nomi = ["Kelly", "Nelly", "Jimmy", "Lenny"]

for nome in range(len(nomi)):
    print(nomi[nome])

#output

#Kelly
#Nelly
#Jimmy
#Lenny

Quando passi len() come argomento a range(), accertati di non fare il seguente errore:

nomi = ["Kelly", "Nelly", "Jimmy", "Lenny"]

for nome in range(len(nomi) + 1):
    print(nomi[nome])

Dopo aver eseguito il codice, otterrai di nuovo l'errore IndexError: list index out of range:

#Kelly
#Nelly
#Jimmy
#Lenny
#Traceback (most recent call last):
#  File "/Users/dionysialemonaki/python_articles/demo.py", line 4, in <module>
#    print(nomi[nome])
#IndexError: list index out of range

Conclusione

Spero che questo articolo ti abbia dato un'idea del perché si verifica l'errore IndexError: list index out of range e di alcuni modi per evitarlo.

Se vuoi imparare di più su Python, dai un'occhiata alla Certificazione di Python di freeCodeCamp. Inizierai ad imparare in modo interattivo e adatto a un principiante. Inoltre, alla fine del corso lavorerai a cinque progetti per mettere in pratica e consolidare ciò che hai imparato.

Grazie per aver letto e buona programmazione!