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.

Definizione

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.

Definizione

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.

Definizione

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.