Iterazione su liste di elementi
Nelle sezioni precedenti abbiamo introdotto le liste che sono composte da una sequenza di elementi. Spesso è necessario eseguire delle operazioni su queste liste, elemento per elemento, in forma iterativa.
Abbiamo visto che le iterazioni possono essere codificate mediante il costrutto WHILE.
Quindi per esempio se dopo aver creato una lista vogliamo moltiplicare ogni suo elemento per due possiamo scrivere il codice seguente.
lista = [0,1,2,3,4,5,6]
lista2 = []
i = 0
n = len(lista) - 1
while i < n:
lista2.append(lista[i]*2)
i += 1
print(lista2)
Eseguendolo otterremo infatti la lista con ogni elemento raddoppiato di valore.
>>>
[0, 2, 4, 6, 8, 10, 6]
Il costrutto FOR-IN
Comunque nonostante la correttezza del codice precedente, dal punto di vista di codifica e di leggibilità sono richieste molte righe di codice per esprimere quello che poi è un semplice concetto: itera per ogni elemento presente nella lista. Infatti abbiamo dovuto creare un contatore, gestirne l’incremento, contare gli elementi contenuti nella lista e creare una condizione per l’iterazione.
Bene tutte queste operazioni si possono esprimere con un semplice costrutto FOR-IN, che richiede una sola riga
lista = [0,1,2,3,4,5,6]
lista2 = []
for item in lista:
lista2.append(item*2)
print(lista2)
Come puoi vedere ogni elemento dell’array lista viene copiato in una variabile temporanea chiamata item, su cui lavorerai all’interno del ciclo FOR scrivendo una serie di comandi nell’indentazione. Non c’è bisogno di contatori, non c’è bisogno di sapere quanto è lunga la lista.
Eseguire una serie di operazioni un certo numero di volte
A volte invece ci serve eseguire un insieme di operazioni un numero ben definito di volte. In questo caso non c’è nessuna condizione da verificare, ma solo il numero n di volte da ripetere il ciclo. Anche in questo caso si potrebbe utilizzare il ciclo WHILE all’infinito con un contatore che tiene conto delle volte che viene eseguita una serie di comandi. Ma anche qui il costrutto FOR-IN si propone come più efficiente.
Sfruttando la funzione range() che restituisce una lista di una sequenza ordinata di valori che vanno da 0 ad n. Possiamo scrivere esempio:
>>> for i in range(5):
print("Eseguo")
>>>
Eseguo
Eseguo
Eseguo
Eseguo
Eseguo
In questo modo sono riuscito a ripetere la stampa per 5 volte.
⇐ Vai a Lezione 2.10 – La funzione range()
Vai a Lezione 3.1 – Funzioni e moduli – il riuso del codice ⇒