Liste e Cicli in Python
Adesso che abbiamo visto in Python come creare una lista e come accedere agli elementi di una lista, è il momento di vedere come iterare una lista, ossia scorrere gli elementi della lista e eseguire delle operazioni su ciascuno di essi.
In Python esistono vari modi per iterare una lista. Li possiamo suddividere in due categorie: idiomatici, ossia quelli che sono consigliati e utilizzati nella maggior parte dei casi, e classici, ossia quelli che sono utilizzati tipicamente in altri linguaggi di programmazione.
Ciclo for
e operatore in
applicato alle Liste
Il modo più semplice e idiomatico per iterare, ossia scorrere, gli elementi di una lista è attraverso il ciclo for
. Differentemente da altri linguaggi di programmazione in cui è necessario specificare un indice da incrementare per accedere ai singoli elementi, in Python è possibile utilizzare l'operatore in
per iterare direttamente sugli elementi della lista.
La sintassi da utilizzare è molto semplice:
for elemento in lista:
# operazioni da eseguire
Usato in questo modo, il ciclo for
è molto simile al ciclo foreach
di altri linguaggi di programmazione. Il ciclo for
scorre gli elementi della lista e li assegna alla variabile elemento
che può essere utilizzata all'interno del ciclo per eseguire le operazioni necessarie.
for elemento in lista:
print(elemento)
Il codice precedente stampa tutti gli elementi della lista, uno per riga.
Ciclo for
e operatore in
applicato alle liste
In Python è possibile utilizzare il ciclo for
per iterare sugli elementi di una lista. Per farlo è sufficiente utilizzare l'operatore in
con la seguente sintassi:
for elemento in lista:
# operazioni da eseguire
Ad ogni iterazione elemento
assume il valore dell'elemento corrente della lista. L'iterazione avviene in ordine crescente degli indici, rispettando la sequenza degli elementi nella lista.
Funzione enumerate
Sebbene comodo, il ciclo for
con l'operatore in
visto sopra ha un difetto. Ad ogni iterazione la variabile elemento contiene il valore corrente, ma non abbiamo alcuna informazione sull'indice dell'elemento.
Ad esempio, supponiamo di voler stampare a schermo la seguente lista:
lista = ["rosso", "verde", "blu", "giallo", "arancione"]
for colore in lista:
print(colore)
Il risultato sarà il seguente:
rosso
verde
blu
giallo
arancione
Adesso, supponiamo di voler stampare anche l'indice dell'elemento corrente. Un modo naïve per farlo è quello di utilizzare un ciclo for
con un indice che incrementiamo ad ogni iterazione:
i = 0
for colore in lista:
print(f'{i}: {colore}')
i += 1
Il risultato sarà il seguente:
0: rosso
1: verde
2: blu
3: giallo
4: arancione
Il codice precedente funziona, ma è alquanto macchinoso. In Python esiste una funzione, enumerate
, che ci permette di ottenere l'indice e il valore corrente in un'unica istruzione.
for i, colore in enumerate(lista):
print(f'{i}: {colore}')
In pratica, con la funzione enumerate
ad ogni iterazione otteniamo due elementi. Il primo è l'indice dell'elemento corrente, il secondo è il valore dell'elemento corrente. A voler essere precisi, il risultato di enumerate
ad ogni iterazione è una tupla di due elementi. Una tupla è una struttura dati molto simile ad una lista che vedremo nelle prossime lezioni.
Funzione enumerate
La funzione enumerate
applicata ad una sequenza ordinata ed utilizzata in un ciclo for
permette di ottenere, ad ogni iterazione, l'indice e il valore corrente.
for i, elemento in enumerate(sequenza):
# operazioni da eseguire
La funzione enumerate
è molto potente e la rivedremo in dettaglio nelle prossime lezioni.
Iterare una lista con i metodi classici
Sebbene sopra abbiamo usato l'operatore in
e la funzione enumerate
per iterare una lista, in Python nessuno vieta di utilizzare i metodi classici. Possiamo infatti utilizzare il metodo len
per ottenere la lunghezza della lista e quindi iterare la lista con un ciclo for
con un indice che incrementiamo ad ogni iterazione.
for i in range(len(lista)):
print(lista[i])
Il risultato è lo stesso di quello ottenuto con l'operatore in
:
rosso
verde
blu
giallo
arancione
Analogamente possiamo anche usare un ciclo while
:
i = 0
while i < len(lista):
print(lista[i])
i += 1
Ovviamente il codice precedente è meno leggibile e meno pythonico. Esistono però casi in cui, a volte, non esistono metodi alternativi.
Metodi classici di iterazione di una lista
In Python si può iterare una lista utilizzando anche cicli classici.
Usando il ciclo for
:
for i in range(len(lista)):
print(lista[i])
Usando il ciclo while
:
i = 0
while i < len(lista):
print(lista[i])
i += 1
In Sintesi
In questa lezione abbiamo visto come iterare una lista in Python. Abbiamo visto come utilizzare il ciclo for
con l'operatore in
e la funzione enumerate
per iterare una lista. Abbiamo anche visto come utilizzare i metodi classici di iterazione di una lista.
Tutte queste tecniche sono fondamentali quando si lavora con liste in Python. In particolare, l'operatore in
e la funzione enumerate
sono molto utili e le rivedremo in dettaglio nelle prossime lezioni.