Obtenir le nombre de boucles dans une boucle Python FOR

259

Dans un Python for boucle qui itère sur une liste, nous pouvons écrire:

for item in list:
    print item

et il passe soigneusement en revue tous les éléments de la liste. Existe-t-il un moyen de savoir dans la boucle combien de fois j'ai bouclé jusqu'à présent? Par exemple, je veux prendre une liste et après avoir traité dix éléments, je veux en faire quelque chose.

Les alternatives auxquelles j'ai pensé seraient quelque chose comme:

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

Ou:

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

Existe-t-il un meilleur moyen (tout comme le for item in list) d'obtenir le nombre d'itérations jusqu'à présent?

gris
la source
1
Vous pourriez également être intéressé par les réponses à l'itération sur une liste en morceaux: stackoverflow.com/questions/434287/…
Dave Bacher
4
doublon possible de l' accès à l'index en Python pour les boucles
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Réponses:

586

La manière pythonique est d'utiliser enumerate:

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

D'accord avec Nick. Voici un code plus élaboré.

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

J'ai commenté la variable count dans votre code.

Vikram Garg
la source
9
Vous pouvez également utiliser enumeratele startparamètre facultatif de pour commencer à énumérer avec 1 au lieu de 0, mais j'utiliserais alors le nom de l'OP à la countplace de idx.
Stefan Pochmann
Je n'avais aucune idée qu'il existe un paramètre de démarrage facultatif. Bon à savoir. Merci
Vikram Garg
1

Je connais une question plutôt ancienne mais ... tombé sur autre chose donc je donne mon coup:

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

En utilisant la fonction zip, nous pouvons obtenir à la fois l'élément et l'index.

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 ...

Voir également :

Python.org

Muhammad Faizan Fareed
la source
0

Essayez d'utiliser itertools.count([n])

Oso
la source
2
Je ne sais pas comment vous utiliseriez le décompte ici. Le décompte est utilisé pour générer des séquences de nombres.
Codie CodeMonkey
mais comment pourrait-il réinitialiser la valeur pour la prochaine itération. L'utilisation d'itertools.count () n'est pas possible ici.
Javed