
Questo articolo descrive come usare il ciclo for in Python.
- Nozioni di base sul ciclo per in Python
- per istruzione in Python
- Termina il ciclo per:
break
- Continua al ciclo successivo:
continue
- Eseguire dopo la normale terminazione:
else
- Funzioni utili nelle istruzioni per
- Estrarre solo alcuni elementi: fetta
- Contatore (indice):
range()
- Elementi e contatore:
enumerate()
- Elenca più:
zip()
- Elenca multipli e contatore:
enumerate(), zip()
- Ordine inverso:
reversed()
- Cicli annidati:
itertools.product()
- Altri argomenti
- dict in per la dichiarazione
- Elena le comprensioni
Vedere l’articolo seguente per un ciclo con l’istruzione mentre che si ripete finché l’espressione condizionale è True.
per istruzione in Python
Un’istruzione for (for-loop) in molti linguaggi di programmazione come C viene scritta utilizzando una variabile contatore e una condizione di continuazione.
for(int i = 0; i < 10; i++)
...
A differenza di C, l’istruzione for in Python è scritta come segue. Puoi impostare qualsiasi nome su variabile.
for variable in iterable object:
...
In corrispondenza di un’istruzione foreach in altri linguaggi, gli elementi di iterabili come gli elenchi vengono assegnati in sequenza alle variabili ed elaborati. Il processo viene affidato a tutti gli elementi.
l = ['Alice', 'Bob', 'Charlie']
for name in l:
print(name)
# Alice
# Bob
# Charlie
Termina il ciclo per:break
Puoi terminare il ciclo per per interruzione.
l = ['Alice', 'Bob', 'Charlie']
for name in l:
if name == 'Bob':
print('!!BREAK!!')
break
print(name)
# Alice
# !!BREAK!!
Vedere il seguente articolo per i dettagli sull’istruzione se.
Continua al ciclo successivo:continue
Puoi saltare il ciclo e passare al successivo continuando.
pausa termina l’intero ciclo per, ma continua salta il codice solo dopo l’istruzione continua nel ciclo.
l = ['Alice', 'Bob', 'Charlie']
for name in l:
if name == 'Bob':
print('!!SKIP!!')
continue
print(name)
# Alice
# !!SKIP!!
# Charlie
Eseguire dopo la normale terminazione:else
Usa else per eseguire qualcosa che il ciclo for è stato completato dopo successo.
l = ['Alice', 'Bob', 'Charlie']
for name in l:
print(name)
else:
print('!!FINISH!!')
# Alice
# Bob
# Charlie
# !!FINISH!!
Se il ciclo per viene terminato per interruzione, la suite nella clausola else non viene eseguita.
for name in l:
if name == 'Bob':
print('!!BREAK!!')
break
print(name)
else:
print('!!FINISH!!')
# Alice
# !!BREAK!!
In caso di continue, viene eseguita la suite nella clausola else.
for name in l:
if name == 'Bob':
print('!!SKIP!!')
continue
print(name)
else:
print('!!FINISH!!')
# Alice
# !!SKIP!!
# Charlie
# !!FINISH!!
Usando altrimenti e continua, puoi interrompere i loop nidificati (loop multipli). Vedere il seguente articolo per i dettagli.
Se vuoi estrarre solo alcuni elementi, specifica l’intervallo con una sezione come [start:stop]. Per start e stop, specifica l’indice che inizia con 0. Si noti che l’elemento nella posizione di stop non è incluso.
l = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
for c in l[2:5]:
print(c)
# C
# D
# E
Puoi omettere start e stop o ottenere l’elemento per ogni passaggio con [start:stop:step]. Un esempio di estrazione solo di elementi con indicizzazione dispari e elementi con indicizzazione pari è il seguente.
for c in l[::2]:
print(c)
# A
# C
# E
# G
for c in l[1::2]:
print(c)
# B
# D
# F
Vedere l’articolo seguente per ulteriori informazioni sulla sezione.
Contatore (indice):range()
Puoi ottenere il contatore (indice) nel ciclo per per intervallo().
for i in range(3):
print(i)
# 0
# 1
# 2
range() arriva un oggetto di tipo range.
print(range(3))
print(type(range(3)))
# range(0, 3)
# <class 'range'>
Per una spiegazione, convertilo in un elenco con list(). Non è necessario convertirlo in un elenco quando lo si utilizza in un’istruzione per venire nell’esempio sopra.
range(stop) restituisce numeri di 0 <= i <stop.
print(list(range(3)))
# [0, 1, 2]
print(list(range(6)))
# [0, 1, 2, 3, 4, 5]
Se vuoi specificare un intervallo, specifica due argomenti come intervallo(inizio, arresto).
print(list(range(10, 13)))
# [10, 11, 12]
Se vuoi specificare step, specifica tre argomenti come range(start, stop, step).
print(list(range(0, 10, 3)))
# [0, 3, 6, 9]
print(list(range(10, 0, -3)))
# [10, 7, 4, 1]
Un esempio dell’istruzione per è il seguente.
for i in range(10, 0, -3):
print(i)
# 10
# 7
# 4
# 1
Vedere il seguente articolo per i dettagli di range().
Elementi e contatore:enumerate()
Puoi ottenere l’elemento e il contatore (indice) contemporaneamente da enumerare().
l = ['Alice', 'Bob', 'Charlie']
for name in l:
print(name)
# Alice
# Bob
# Charlie
for i, name in enumerate(l):
print(i, name)
# 0 Alice
# 1 Bob
# 2 Charlie
È possibile specificare un valore iniziale come secondo argomento di enumerate().
for i, name in enumerate(l, 1):
print(i, name)
# 1 Alice
# 2 Bob
# 3 Charlie
for i, name in enumerate(l, 42):
print(i, name)
# 42 Alice
# 43 Bob
# 44 Charlie
enumerate() non ha argomenti per specificare step come range(), ma può essere fatto come segue.
step = 3
for i, name in enumerate(l):
print(i * step, name)
# 0 Alice
# 3 Bob
# 6 Charlie
Elenca più:zip()
Più oggetti iterabili possono essere gestiti da zip().
names = ['Alice', 'Bob', 'Charlie']
ages = [24, 50, 18]
for name, age in zip(names, ages):
print(name, age)
# Alice 24
# Bob 50
# Charlie 18
È anche possibile combinare tre o più oggetti iterabili.
points = [100, 85, 90]
for name, age, point in zip(names, ages, points):
print(name, age, point)
# Alice 24 100
# Bob 50 85
# Charlie 18 90
Vedere l’articolo seguente per i dettagli, ad esempio quando il numero di elementi è diverso.
Come nell’esempio sopra, zip() gli elementi di più oggetti iterabili in ordine. Se vuoi tutte le combinazioni di elementi di più oggetti iterabili, usa it ottenere più avanti.
Elenca multipli e contatore:enumerate(), zip()
Puoi usare enumerate() e zip() insieme. Si noti che i nomi delle variabili intere per zip() devono essere racchiusi tra parentesi ().
names = ['Alice', 'Bob', 'Charlie']
ages = [24, 50, 18]
for i, (name, age) in enumerate(zip(names, ages)):
print(i, name, age)
# 0 Alice 24
# 1 Bob 50
# 2 Charlie 18
Ordine inverso:reversed()
Puoi ottenere gli elementi di un oggetto iterabile in ordine inverso tramite reversed().
l = ['Alice', 'Bob', 'Charlie']
for name in reversed(l):
print(name)
# Charlie
# Bob
# Alice
L’oggetto intervallo può anche essere invertito. È possibile specificare un valore negativo per step senza utilizzare reversed().
for i in reversed(range(3)):
print(i)
# 2
# 1
# 0
for i in range(2, -1, -1):
print(i)
# 2
# 1
# 0
L’oggetto enumerare non può essere annullato. Devi convertirlo in un elenco con list().
# for i, name in reversed(enumerate(l)):
# print(i, name)
# TypeError: 'enumerate' object is not reversible
for i, name in reversed(list(enumerate(l))):
print(i, name)
# 2 Charlie
# 1 Bob
# 0 Alice
Se non vuoi invertire l’indice, usa reversed() all’interno di enumerate().
for i, name in enumerate(reversed(l)):
print(i, name)
# 0 Charlie
# 1 Bob
# 2 Alice
L’oggetto zip non può essere annullato. Devi convertirlo in un elenco con list().
l2 = [24, 50, 18]
# for name, age in reversed(zip(l, l2)):
# print(name, age)
# TypeError: 'zip' object is not reversible
for name, age in reversed(list(zip(l, l2))):
print(name, age)
# Charlie 18
# Bob 50
# Alice 24
Puoi scrivere loop nidificati in Python come segue. In Python, i blocchi sono rappresentati da rientri, quindi aggiungi semplicemente più rientri.
l1 = [1, 2, 3]
l2 = [10, 20, 30]
for i in l1:
for j in l2:
print(i, j)
# 1 10
# 1 20
# 1 30
# 2 10
# 2 20
# 2 30
# 3 10
# 3 20
# 3 30
Puoi ottenere lo stesso risultato da itertools.product().
import itertools
l1 = [1, 2, 3]
l2 = [10, 20, 30]
for i, j in itertools.product(l1, l2):
print(i, j)
# 1 10
# 1 20
# 1 30
# 2 10
# 2 20
# 2 30
# 3 10
# 3 20
# 3 30
È anche possibile passare tre o più iterabili come argomenti a itertools.product(). Vedere il seguente articolo per i dettagli.
Se vuoi uscire dal loop all’interno dei loop multipli con break, è facile usare itertools.product().
dict in per la dichiarazione
L’oggetto nell’istruzione per riporta le chiavi.
d = {'key1': 1, 'key2': 2, 'key3': 3}
for k in d:
print(k)
# key1
# key2
# key3
Se vuoi ottenere valori o coppie chiave-valore, usa values() e items().
for v in d.values():
print(v)
# 1
# 2
# 3
for k, v in d.items():
print(k, v)
# key1 1
# key2 2
# key3 3
Vedere il seguente articolo per i dettagli.
Elena le comprensioni
Per generare un nuovo elenco elaborando gli elementi di oggetti iterabili, è più semplice scrivere utilizzando la comprensione degli elenchi rispetto all’istruzione for.
La comprensione dell’elenco è scritta come segue.
[expression for variable_name in iterable]
Esempi di comprensioni di elenchi e di istruzioni sono i seguenti. Le comprensioni degli elenchi sono più concise.
squares = [i**2 for i in range(5)]
print(squares)
# [0, 1, 4, 9, 16]
squares = []
for i in range(5):
squares.append(i**2)
print(squares)
# [0, 1, 4, 9, 16]
Vedere il seguente articolo per i dettagli sulla comprensione degli elenchi.