2010-07-01 8 views
166

En un bucle for Python que itera sobre una lista podemos escribir:Obtener cuenta de bucles dentro de un bucle FOR Python

for item in list: 
    print item 

y limpiamente pasa por todos los elementos de la lista. ¿Hay alguna manera de saber en el ciclo cuántas veces he estado bucleando hasta ahora? Por ejemplo, quiero tomar una lista y después de procesar diez elementos, quiero hacer algo con ellos.

Las alternativas que pensé sería algo así como:

count=0 
for item in list: 
    print item 
    count +=1 
    if count % 10 == 0: 
     print 'did ten' 

O:

for count in range(0,len(list)): 
    print list[count] 
    if count % 10 == 0: 
     print 'did ten' 

¿Hay una manera mejor (al igual que el for item in list) para obtener el número de iteraciones hasta ahora?

+0

Usted también puede estar interesado en las respuestas a la iteración en una lista en trozos: http://stackoverflow.com/questions/434287/what-is-the-most-pythonic-way-to- iterate-over-a-list-in-chunks –

+1

posible duplicado de [Acceso al índice en Python para bucles] (http://stackoverflow.com/questions/522563/accessing-the-index-in-python-for-loops) –

Respuesta

396

La forma Pythonic es utilizar enumerate:

for idx,item in enumerate(list): 
0

Trate de usar itertools.count([n])

+2

No estoy seguro de cómo usaría el recuento aquí. Count se usa para generar secuencias de números. –

+0

, pero ¿cómo se restablecería el valor de la siguiente iteración? Usar itertools.count() no es factible aquí. – javed

43

de acuerdo con Nick. Aquí hay un código más elaborado.

#count=0 
for idx, item in enumerate(list): 
    print item 
    #count +=1 
    #if count % 10 == 0: 
    if (idx+1) % 10 == 0: 
     print 'did ten' 

He comentado la variable de conteo en su código.

+0

De acuerdo. Déjame corregirlo. –

+0

También podría usar el parámetro 'start' opcional de' enumerate' para comenzar a enumerar con 1 en lugar de 0, aunque luego usaría el nombre del OP 'count' en lugar de' idx'. –

+0

No tenía idea de que hay un parámetro de inicio opcional. Bueno saber. Gracias –

0

sé pregunta bastante viejo, pero .... se encontró mirando otra cosa así que doy mi tiro:

[each*2 for each in [1,2,3,4,5] if each % 10 == 0]) 
1

Esto también es posible usar zip().

for i, item in zip(range(len(my_list)), my_list): 
+0

aunque no use este enfoque con grandes iteradores .. – wom

Cuestiones relacionadas