W3docs

Cicli For in Python

Scopri come funzionano i cicli for in Python: sintassi, range(), enumerate(), break, continue, else, cicli annidati e iterazione su liste, stringhe e dizionari.

Un ciclo for in Python itera su ogni elemento di una sequenza — una lista, una tupla, una string, un dizionario, un insieme o qualsiasi altro iterabile — ed esegue un blocco di codice una volta per ogni elemento. A differenza di altri linguaggi dove for tipicamente conta i numeri, il for di Python è un ciclo for-each che attraversa gli elementi direttamente.

Questo capitolo tratta:

  • Sintassi di base e come funziona la variabile del ciclo
  • La funzione range() per i cicli con contatore
  • break, continue e la clausola else
  • enumerate() e zip() per un'iterazione più ricca
  • Iterazione su stringhe, dizionari e strutture annidate
  • Cicli for annidati
  • L'istruzione pass come segnaposto

Sintassi di base

for variable in iterable:
    # block executed once per item

variable viene assegnata a ogni elemento successivo dell'iterable. Il blocco indentato viene eseguito una volta per ogni elemento.

Iterare su una lista

python— editable, runs on the server

Output:

apple
banana
cherry

Il ciclo assegna "apple" a fruit, esegue print(fruit), poi passa a "banana", e così via finché tutti gli elementi non sono esauriti.

Iterare su una string

Una string è essa stessa un iterabile — ogni carattere è un elemento:

for ch in "Python":
    print(ch)

Output:

P
y
t
h
o
n

La funzione range()

range() genera una sequenza di interi su richiesta. È il modo più comune per eseguire un ciclo un numero specifico di volte.

range(stop)
range(start, stop)
range(start, stop, step)
ParametroPredefinitoSignificato
start0Primo valore (incluso)
stopobbligatorioLimite superiore (escluso)
step1Incremento tra i valori

Contare da 1 a 5

python— editable, runs on the server

Output:

1
2
3
4
5

range(1, 6) produce 1, 2, 3, 4, 5 — il valore di stop 6 non è incluso.

Contare a passi

for i in range(0, 10, 2):
    print(i)

Output:

0
2
4
6
8

Contare al contrario

Un passo negativo itera in ordine inverso:

for i in range(10, 0, -2):
    print(i)

Output:

10
8
6
4
2

L'istruzione break

break esce dal ciclo immediatamente, prima che tutti gli elementi siano stati visitati.

for i in range(1, 6):
    if i == 3:
        break
    print(i)

Output:

1
2

Quando i è uguale a 3, break si attiva e il ciclo si interrompe — 3, 4 e 5 non vengono mai stampati.

Quando usare break: per cercare in una lista e fermarsi non appena si trova una corrispondenza; per uscire anticipatamente da un calcolo lungo.


L'istruzione continue

continue salta il resto dell'iterazione corrente e passa direttamente all'elemento successivo.

for i in range(1, 6):
    if i == 3:
        continue
    print(i)

Output:

1
2
4
5

Quando i è uguale a 3, continue salta print(i) e passa a i = 4.


La clausola else

Il ciclo for di Python supporta un blocco else opzionale che viene eseguito solo se il ciclo è terminato normalmente (cioè non è stato interrotto da break).

for i in range(1, 4):
    print(i)
else:
    print("Loop finished")

Output:

1
2
3
Loop finished

Se il ciclo termina tramite break, il blocco else viene saltato:

for i in range(1, 6):
    if i == 3:
        break
    print(i)
else:
    print("Loop finished without break")

Output:

1
2

La clausola else è utile per segnalare se una ricerca ha avuto successo — se usi break quando trovi una corrispondenza, il blocco else viene eseguito solo quando non è stata trovata nessuna corrispondenza.


enumerate() — ciclo con indice e valore

enumerate() abbina ogni elemento al suo indice di posizione, così si ottengono entrambi in un unico ciclo senza una variabile contatore separata.

colors = ["red", "green", "blue"]
for index, color in enumerate(colors):
    print(index, color)

Output:

0 red
1 green
2 blue

Per iniziare a contare da un numero diverso, passa start:

fruits = ["apple", "banana", "cherry"]
for i, fruit in enumerate(fruits, start=1):
    print(i, fruit)

Output:

1 apple
2 banana
3 cherry

zip() — iterare su due sequenze contemporaneamente

zip() abbina gli elementi di due (o più) iterabili fianco a fianco:

names = ["Alice", "Bob", "Charlie"]
scores = [95, 87, 92]
for name, score in zip(names, scores):
    print(name, score)

Output:

Alice 95
Bob 87
Charlie 92

zip() si ferma quando l'iterabile più corto è esaurito.


Iterare sui dizionari

Iterare su un dizionario per impostazione predefinita restituisce le sue chiavi:

person = {"name": "Alice", "age": 30, "city": "Paris"}
for key in person:
    print(key, ":", person[key])

Output:

name : Alice
age : 30
city : Paris

Usa .items() per ottenere le coppie chiave-valore insieme:

for key, value in person.items():
    print(key, ":", value)

Output:

name : Alice
age : 30
city : Paris

Vedi anche il capitolo Loop Dictionaries per altri pattern.


Cicli for annidati

Un ciclo for può essere inserito all'interno di un altro ciclo for. Il ciclo interno viene eseguito completamente per ogni singola iterazione del ciclo esterno.

python— editable, runs on the server

Output:

red apple
red banana
red cherry
big apple
big banana
big cherry
tasty apple
tasty banana
tasty cherry

Attenzione: break all'interno di un ciclo annidato esce solo dal ciclo interno, non da entrambi. Per uscire da entrambi i cicli contemporaneamente è necessaria una variabile flag oppure bisogna riorganizzare il codice in una funzione e usare return.


L'istruzione pass

pass è un segnaposto che non esegue alcuna operazione. Usala quando un ciclo for è richiesto sintatticamente ma non hai ancora nulla da inserire nel corpo:

for i in range(3):
    pass  # TODO: implement later

Senza pass, Python solleverebbe un IndentationError perché un blocco vuoto è sintassi non valida.


Cicli for vs list comprehension

Un pattern comune è costruire una nuova lista all'interno di un ciclo for:

squares = []
for x in range(1, 6):
    squares.append(x ** 2)
print(squares)

Output: [1, 4, 9, 16, 25]

Python offre un'alternativa più concisa chiamata list comprehension:

squares = [x ** 2 for x in range(1, 6)]
print(squares)

Output: [1, 4, 9, 16, 25]

Le list comprehension sono idiomatiche per trasformazioni semplici; usa un ciclo for ordinario quando il corpo è complesso o ha effetti collaterali.


Scegliere tra for e while

SituazionePreferire
Conosci il numero di iterazioni o hai un iterabilefor
Iteri finché una condizione cambiawhile
Hai bisogno di indice e valorefor + enumerate()
Iteri su due liste contemporaneamentefor + zip()

Esercizi

Pratica
Which built-in function generates a sequence of integers for use in a for loop?
Which built-in function generates a sequence of integers for use in a for loop?
Pratica
What does the else clause of a for loop do?
What does the else clause of a for loop do?
Pratica
What are the primary uses of for loops in Python?
What are the primary uses of for loops in Python?
Was this page helpful?