Utilizzando un ciclo for, come posso accedere all'indice del ciclo, da 1 a 5 in questo caso?
Utilizzare enumerate
per ottenere l'indice con l'elemento durante l'iterazione:
for index, item in enumerate(items):
print(index, item)
E nota che gli indici di Python iniziano da zero, quindi otterrai da 0 a 4 con quanto sopra. Se si desidera il conteggio, da 1 a 5, procedere come segue:
for count, item in enumerate(items, start=1):
print(count, item)
Flusso di controllo unidiomatico
Quello che stai chiedendo è l'equivalente Pythonic di quanto segue, che è l'algoritmo che la maggior parte dei programmatori di linguaggi di livello inferiore userebbe:
index = 0 # Python's indexing starts at zero
for item in items: # Python's for loops are a "for each" loop
print(index, item)
index += 1
O in lingue che non hanno un ciclo for-each:
index = 0
while index < len(items):
print(index, items[index])
index += 1
o talvolta più comunemente (ma unidiomaticamente) trovato in Python:
for index in range(len(items)):
print(index, items[index])
Utilizzare la funzione di enumerazione
La enumerate
funzione di Python riduce il disordine visivo nascondendo la contabilità degli indici e incapsulando l'iterabile in un altro iterabile (un enumerate
oggetto) che produce una tupla di due elementi dell'indice e l'elemento che l'iterable originale fornirebbe. Sembra così:
for index, item in enumerate(items, start=0): # default is zero
print(index, item)
Questo esempio di codice è abbastanza bene l' esempio canonico della differenza tra il codice che è idiomatico di Python e il codice che non lo è. Il codice idiomatico è Python sofisticato (ma non complicato), scritto nel modo in cui doveva essere usato. Il codice idiomatico è previsto dai progettisti del linguaggio, il che significa che di solito questo codice non è solo più leggibile, ma anche più efficiente.
Ottenere un conteggio
Anche se non hai bisogno di indici mentre procedi, ma hai bisogno di un conteggio delle iterazioni (a volte desiderabili) puoi iniziare con 1
e il numero finale sarà il tuo conteggio.
for count, item in enumerate(items, start=1): # default is zero
print(item)
print('there were {0} items printed'.format(count))
Il conteggio sembra essere più ciò che si intende chiedere (al contrario dell'indice) quando si afferma che si desidera da 1 a 5.
Abbattimento: una spiegazione dettagliata
Per scomporre questi esempi, supponiamo di avere un elenco di elementi che vogliamo ripetere con un indice:
items = ['a', 'b', 'c', 'd', 'e']
Ora passiamo questo iterabile per enumerare, creando un oggetto enumerato:
enumerate_object = enumerate(items) # the enumerate object
Possiamo estrarre il primo elemento da questo iterabile che avremmo messo in loop con la next
funzione:
iteration = next(enumerate_object) # first iteration from enumerate
print(iteration)
E vediamo che otteniamo una tupla di 0
, il primo indice e 'a'
il primo elemento:
(0, 'a')
possiamo usare ciò che viene definito " decompressione della sequenza " per estrarre gli elementi da questa doppia tupla:
index, item = iteration
# 0, 'a' = (0, 'a') # essentially this.
e quando abbiamo ispezionare index
, troviamo si riferisce al primo indice, 0, e item
si riferisce al primo elemento, 'a'
.
>>> print(index)
0
>>> print(item)
a
Conclusione
- Gli indici Python iniziano da zero
- Per ottenere questi indici da un iterabile durante l'iterazione su di esso, utilizzare la funzione di enumerazione
- L'uso dell'enumerazione in modo idiomatico (insieme al disimballaggio della tupla) crea un codice più leggibile e gestibile:
Quindi fai questo:
for index, item in enumerate(items, start=0): # Python indexes start at zero
print(index, item)