Obtener recuento de bucles dentro de un bucle FOR de Python

259

En un forbucle Python que itera sobre una lista, podemos escribir:

for item in list:
    print item

y pasa cuidadosamente por todos los elementos de la lista. ¿Hay alguna manera de saber dentro del bucle cuántas veces he estado haciendo bucles hasta ahora? Por ejemplo, quiero tomar una lista y después de haber procesado diez elementos, quiero hacer algo con ellos.

Las alternativas en las que pensé serían algo 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 mejor manera (al igual que la for item in list) para obtener el número de iteraciones hasta ahora?

greye
fuente
1
También te pueden interesar las respuestas para iterar sobre una lista en fragmentos: stackoverflow.com/questions/434287/…
Dave Bacher
44
posible duplicado de Acceder al índice en Python para bucles
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Respuestas:

586

La forma pitónica es usar enumerate:

for idx,item in enumerate(list):
Nick Bastin
fuente
86

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.

Vikram Garg
fuente
9
También podría usar enumerateel startparámetro opcional de '' para comenzar a enumerar con 1 en lugar de 0, aunque luego usaría el nombre del OP en countlugar de idx.
Stefan Pochmann
No tenía idea de que hay un parámetro de inicio opcional. Bueno saber. Gracias
Vikram Garg
1

Sé una pregunta bastante antigua, pero ... me encontré buscando otra cosa, así que le doy mi oportunidad:

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

Usando la función zip podemos obtener tanto el elemento como el índice.

countries = ['Pakistan','India','China','Russia','USA']

for index, element zip(range(0,countries),countries):

         print('Index : ',index)
         print(' Element : ', element,'\n')

output : Index : 0 Element : Pakistan ...

Ver también :

Python.org

Muhammad Faizan Fareed
fuente
0

Intenta usar itertools.count([n])

Oso
fuente
2
No estoy seguro de cómo usarías Count aquí. Count se usa para generar secuencias de números.
Codie CodeMonkey
pero ¿cómo restablecería el valor para la próxima iteración? Usar itertools.count () no es factible aquí.
Javed