2010-01-15 9 views
13

mi ritrovo spesso a scrivere codice come questo:Come ottenere l'indice della lista e l'elemento contemporaneamente in Python?

k = 0 
for i in mylist: 
    # y[k] = some function of i 
    k += 1 

Invece, ho potuto fare

for k in range(K): 
    # y[k] = some function of mylist[k] 

ma che non sembra "divinatorio". (Sai ... indicizzazione Ick!) C'è qualche sintassi che mi consente di estrarre contemporaneamente sia l'indice (k) che l'elemento (i) usando un ciclo, una lista di comprensione o un generatore? Il compito è nel calcolo scientifico, quindi ci sono molte cose nel corpo del ciclo, rendendo la comprensione di una lista probabilmente non abbastanza potente da sola, credo.

Sono i benvenuti suggerimenti su concetti correlati, che potrei anche non avere. Grazie.

risposta

38

È possibile utilizzare enumerate:

for k,i in enumerate(mylist): 
    #do something with index k 
    #do something with element i 

Maggiori informazioni su looping techniques.

Edit:
Come sottolineato nei commenti, utilizzando altri nomi di variabili come

for i, item in enumerate(mylist): 

rende più facile da leggere e capire il codice nel lungo periodo. Normalmente è necessario utilizzare i, j, k per i numeri e meaningful variable names per descrivere gli elementi di un elenco.
I.e. se ne hai, ad es. un elenco di libri e iterare su di esso, quindi si dovrebbe nominare la variabile book.

+3

enumerate permette anche di avviare l'indice in cui ti piace utilizzando il parametro di avvio. Questo è abbastanza utile a volte. http://docs.python.org/library/functions.html#enumerate – jps

+1

Posso essere solo in questo, ma usando 'i' come la variabile per contenere ogni elemento del iterable mi butterebbe fuori durante la lettura di questo codice. Non sono 'i' e' j 'piuttosto nomi di variabili standard per gli indici nel codice di loop? –

+1

@Will: Sono d'accordo, l'ho appena usato poiché l'OP usa questa relazione nella sua domanda. –

15

enumerate è la risposta:

for index, element in enumerate(iterable): 
    #work with index and element 
Problemi correlati