Introduzione
Come in altri linguaggi di programmazione, i cicli for in Python sono un po' diversi nel senso che funzionano più come un iteratore e meno come una semplice parola chiave for. In Python non esiste una sintassi in stile C come for(i=0; i<n; i++), ma si usa for in n.
Possono essere usati per iterare su una sequenza come una list, una string, una tuple, un set, un array, un data frame.
Data una lista di elementi, il ciclo for può essere usato per iterare su ogni elemento di quella lista ed eseguirlo.
Per iterare su una serie di elementi, i cicli for usano la funzione range. La funzione range restituisce una nuova lista con numeri dell’intervallo specificato in base alla lunghezza della sequenza.
Durante l’iterazione su una sequenza puoi anche usare l’indice degli elementi per iterare, ma la cosa fondamentale è prima calcolare la lunghezza della lista e poi iterare sulla serie entro l’intervallo di tale lunghezza.
I cicli for in Python sono indicizzati a partire da zero.
Passiamo subito alla parte di implementazione.
Puoi anche guardare questo video per un tutorial rapido!
Inizia a imparare Python gratis
Introduzione alla Data Science in Python
Implementare i cicli
Per iniziare, stampiamo i numeri da 1 a 10. Poiché i cicli for in Python sono indicizzati da zero, dovrai aggiungere uno a ogni iterazione; altrimenti stamperà valori da 0 a 9.
for i in range(10):
print (i+1)
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10
Iteriamo ora su una stringa con la parola Datacamp usando un ciclo for e stampiamo solo la lettera a.
for i in "Datacamp":
if i == 'a':
print (i)
# a
# a
# a
Supponiamo che tu voglia definire una lista di elementi e iterare su quegli elementi uno per uno.
sequence = [1, 2, 8, 100, 200, 'datacamp', 'tutorial']
for i in sequence:
print (i)
# 1
# 2
# 8
# 100
# 200
# datacamp
# tutorial
Ma se vuoi prima trovare la lunghezza della lista e poi iterare su di essa? Userai la funzione integrata len e poi applicherai range al risultato della lunghezza.
Ricorda, range si aspetta sempre un valore intero.
sequence = [1, 2, 8, 100, 200, 'datacamp', 'tutorial']
for i in range(len(sequence)):
print (sequence[i])
# 1
# 2
# 8
# 100
# 200
# datacamp
# tutorial
Ottimo! Ma perché dovresti usare la funzione len quando puoi usare direttamente for i in numbers? La risposta è semplice. Se vuoi modificare o lavorare con gli indici della sequenza, ad esempio cambiando un elemento di una lista esistente, allora ti serve range(len(sequence)).
sequence = [1, 2, 8, 100, 200, 'datacamp', 'tutorial']
for i in range(len(sequence)):
element = sequence[i]
if type(element) == int:
sequence[i] = element + 4
print(sequence)
# [5, 6, 12, 104, 204, 'datacamp', 'tutorial']
Figo, vero? Sei riuscito a modificare gli elementi della lista in base alla condizione if.
Vediamo ora come stampare i numeri dispari tra 1 e 20. Per farlo, dovrai definire tre cose nella funzione range: il punto di partenza, il punto di arrivo e il valore di incremento (o step) con cui il ciclo avanzerà sui numeri da 1 a 20.
for i in range(1,20,2):
print (i)
# 1
# 3
# 5
# 7
# 9
# 11
# 13
# 15
# 17
# 19
Ciclo for annidato
for i in range(11):
for j in range(i):
print (i, end=' ')
print()
# 1
# 2 2
# 3 3 3
# 4 4 4 4
# 5 5 5 5 5
# 6 6 6 6 6 6
# 7 7 7 7 7 7 7
# 8 8 8 8 8 8 8 8
# 9 9 9 9 9 9 9 9 9
# 10 10 10 10 10 10 10 10 10 10
Ciclo for per iterare su righe e colonne di un dataframe
import pandas as pd
iris = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')
iris.head()
| sepal_length | sepal_width | petal_length | petal_width | species | |
|---|---|---|---|---|---|
| 0 | 5.1 | 3.5 | 1.4 | 0.2 | setosa |
| 1 | 4.9 | 3.0 | 1.4 | 0.2 | setosa |
| 2 | 4.7 | 3.2 | 1.3 | 0.2 | setosa |
| 3 | 4.6 | 3.1 | 1.5 | 0.2 | setosa |
| 4 | 5.0 | 3.6 | 1.4 | 0.2 | setosa |
len(iris)
# 150
for i in range(len(iris)):
Class = iris.iloc[i,4]
if Class == 'versicolor' and i < 70:
print (Class)
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
Successivamente, aggiungiamo due a ogni riga delle colonne sepal_length,sepal_width, petal_length e petal_width.
columns = ['sepal_length','sepal_width','petal_length','petal_width']
for indices, row in iris.iterrows():
for column in columns:
iris.at[indices,column] = row[column] + 2
iris.head()
| sepal_length | sepal_width | petal_length | petal_width | species | |
|---|---|---|---|---|---|
| 0 | 7.1 | 5.5 | 3.4 | 2.2 | setosa |
| 1 | 6.9 | 5.0 | 3.4 | 2.2 | setosa |
| 2 | 6.7 | 5.2 | 3.3 | 2.2 | setosa |
| 3 | 6.6 | 5.1 | 3.5 | 2.2 | setosa |
| 4 | 7.0 | 5.6 | 3.4 | 2.2 | setosa |
Iterare su una sequenza con la funzione Lambda
La funzione lambda di Python è veloce e potente rispetto al semplice ciclo for. È ampiamente usata, soprattutto quando si lavora con i DataFrame. Puoi elaborare i tuoi dati con l’aiuto della funzione Lambda con pochissimo codice. Anche se, a volte, può risultare difficile da capire.
x = [20, 30, 40, 50, 60]
y = []
for v in x :
y += [v * 5]
print(y)
# [100, 150, 200, 250, 300]
Ora proviamo con una lambda e la funzione map.
Map accetta in input una funzione, ad esempio una funzione lambda, e una sequenza x e poi restituisce una nuova sequenza.
x = [20, 30, 40, 50, 60]
y = map(lambda x: x * 5,x)
print(y)
# <map object at 0x4063cc8>
Restituisce un generatore e, per ottenere l’output dal generatore, passi il risultato come argomento a list.
x = [20, 30, 40, 50, 60]
y = map(lambda x: x * 5,x)
print(list(y))
# [100, 150, 200, 250, 300]
Ora facciamo un passo indietro e guardiamo sia il metodo con il ciclo for sia la combinazione lambda/map(). Noterai che la differenza tra i due sta nell’aggiunta di map, lambda e nella rimozione di "for" e "in". E, inoltre, sei riuscito a scrivere tutto in una sola riga.
Conclusione
Complimenti per aver completato questo tutorial base sui cicli for in Python.
I cicli for sono la spina dorsale di ogni linguaggio di programmazione e, in Python, usarli non è per niente difficile da codificare: sono simili, nello spirito, a scrivere una frase in inglese.
Se vuoi imparare di più sui cicli for in Python, segui il corso Python Data Science Toolbox (Parte 2) di DataCamp.
Per qualsiasi domanda su questo tutorial, sentiti libero di scrivere nei commenti qui sotto.

