2010-01-15 15 views
13

Kendimi sık sık böyle bir kod yazarken buluyorum:Python'da liste indeksi ve eleman eş zamanlı olarak nasıl alınır?

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

Bunun yerine

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

yapabilirim ama bu "pythonic" görünmüyor. (Biliyorsun ... indeksleme. Ick!) Hem indeksi (k) hem de elementi (i) eşzamanlı olarak bir döngü, liste anlama veya üreteci kullanarak çıkarmamı sağlayan bazı sözdizimi var mı? Görev bilimsel hesaplamada, bu yüzden döngü bedeninde çok fazla şey var, belki de kendi başına yeterince güçlü olmayan bir liste kavrayışını yapıyorum.

Ayrıca ilgili kavramlara da inanıyorum. Teşekkür ederim.

cevap

38

Sen enumerate kullanabilirsiniz:

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

daha fazla bilgiyi yaklaşık looping techniques.

Düzenleme:
olarak

for i, item in enumerate(mylist): 

gibi diğer değişken adlarını kullanarak, Açıklamalarda belirttiği Kolay okunması ve uzun vadede daha kolay anlama yapar. Normalde, bir listenin öğelerini tanımlamak için, j, k ve meaningful variable names kullanmalısınız.
I.e. eğer varsa Bir kitap listesi ve üzerinde yineleme, daha sonra book değişkenini adlandırmalısınız.

for index, element in enumerate(iterable): 
    #work with index and element 
+3

numaralandırmak da nerede başlangıç ​​parametresini kullanarak gibi indeksi başlatmak sağlar: – jps

+1

Bu konuda yalnız olabilirim, ancak bu kodu okurken yinelemenin her elemanını tutmak için değişken olarak "i" yi kullanmamı engellerim. Döngü kodundaki indeksler için j' oldukça standart değişken isimleri değil mi? –

+1

@Will: Katılıyorum, OP kullandığı için bu ilişkiyi kullandım. –

15

enumerate

cevaptır. Bazen oldukça kullanışlı. http://docs.python.org/library/functions.html#enumerate
İlgili konular