HOWTO · Python
Intervallo all'indietro in Python
Questo tutorial spiega come iterare all’indietro in Python usando la funzione `range()`, `reversed()`, lo slicing e un ciclo `while`.
In questa pagina
Per iterare all’indietro in Python, il metodo dipende da ciò che vuoi visitare. Usa una range() decrescente per i valori numerici, reversed() per attraversare una sequenza esistente senza modificarla oppure lo slicing quando ti serve una copia invertita.
Usa range() con un passo negativo
range(start, stop, step) genera valori da start verso stop, ma non include mai stop. Un passo negativo procede in ordine decrescente. Per esempio, per contare da 10 a 1 inclusi, parti da 10 e usa 0 come limite finale escluso:
Esegui questo esempio. Il codice e le eventuali etichette o gli output visibili restano in inglese:
for number in range(10, 0, -1):
print(number)
Per includere lo zero nel conto alla rovescia da 100, usa range(100, -1, -1): il limite finale deve essere inferiore di uno all’ultimo valore desiderato. Se il valore iniziale è già minore del limite finale, un passo negativo non fa il conto alla rovescia; scegli valore iniziale, limite finale e passo in modo che procedano nella stessa direzione. range() è utile quando il ciclo deve lavorare con numeri, per esempio indici o un conto alla rovescia, anziché con gli elementi di una raccolta.
Usa reversed() per iterare su una sequenza
Usa reversed() quando devi visitare gli elementi di una sequenza esistente dall’ultimo al primo. Restituisce un iteratore e lascia invariata la sequenza originale. Funziona con liste, stringhe e intervalli, oltre che con altri oggetti reversibili.
Esegui questo esempio. Il codice e le eventuali etichette o gli output visibili restano in inglese:
items = ["first", "second", "third"]
for item in reversed(items):
print(item)
Per una sequenza numerica, reversed(range(5)) scorre i valori da 4 a 0. Preferisci questa forma quando i valori provengono già da un intervallo; usa range() con un passo negativo quando vuoi specificare direttamente l’intervallo numerico decrescente. Poiché reversed() restituisce un iteratore, non crea una seconda lista solo per attraversare gli elementi al contrario.
Inverti una lista o una stringa con lo slicing
Una fetta con passo -1, scritta sequence[::-1], restituisce gli elementi in ordine inverso. Con una lista o una stringa crea una nuova sequenza e lascia intatto l’originale. È una soluzione concisa quando ti serve il valore invertito, per esempio per assegnarlo a un’altra variabile o passarlo a una funzione.
Esegui questo esempio. Il codice e gli eventuali output visibili restano in inglese:
word = "Python"
backward = word[::-1]
print(backward)
Lo slicing alloca una copia, quindi usa una quantità di memoria proporzionale alla lunghezza della sequenza. Se devi solo iterare sugli elementi e non ti serve un valore invertito separato, reversed(sequence) evita questa copia. La stessa sintassi di slicing funziona con le liste, per esempio items[::-1].
Usa un contatore quando ti serve una logica di ciclo personalizzata
Un ciclo while è utile quando ogni passaggio dipende dal lavoro svolto nell’iterazione precedente o quando l’aggiornamento è più articolato di una sottrazione di uno. Imposta il contatore sul primo valore da elaborare, usa una condizione inclusiva se quel valore è zero e aggiorna il contatore esattamente una volta per iterazione:
Esegui questo esempio. Il codice e gli output visibili restano in inglese:
number = 4
while number >= 0:
print(number)
number -= 1
4
3
2
1
0
La condizione number >= 0 include lo zero. Con number > 0 il ciclo terminerebbe prima di elaborarlo. Per un semplice conto alla rovescia a intervallo fisso, range() è più breve e riduce il rischio di errori nell’aggiornamento; scegli un contatore quando una logica personalizzata rende utile l’aggiornamento esplicito.
Scegli il metodo giusto per iterare all’indietro
Usa range() con un passo negativo quando ti serve una sequenza di numeri o indici decrescenti. Usa reversed() quando vuoi attraversare una sequenza esistente senza modificarla e non ti serve una copia. Usa [::-1] quando vuoi ottenere una lista o una stringa invertita come nuovo valore, tenendo presente che l’operazione alloca una nuova sequenza. Scegli un contatore in un ciclo while quando il passaggio successivo o la condizione di arresto dipendono da una logica personalizzata. In ogni caso, decidi se includere il limite finale prima di scrivere il limite di range o la condizione del ciclo: è la causa più comune degli errori di uno scarto.