2010-07-01 8 views
166

Dans une boucle Python for qui effectue une itération sur une liste, nous pouvons écrire:nombre de boucles dans une boucle Python

for item in list: 
    print item 

et il va parfaitement à travers tous les éléments de la liste. Y at-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 faire quelque chose avec eux.

Les alternatives que je pensais au sujet serait 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' 

Y at-il une meilleure façon (comme le for item in list) pour obtenir jusqu'à présent le nombre d'itérations?

+0

Vous pourriez également être intéressé par les réponses à itérer sur une liste en morceaux: http://stackoverflow.com/questions/434287/what-is-the-most-pythonic-way-to- itérer-sur-une-liste-en-morceaux –

+1

duplication possible de [Accès à l'index en Python pour les boucles] (http://stackoverflow.com/questions/522563/accessing-the-index-in-python-for-loops –

Répondre

396

La façon pythonique est d'utiliser enumerate:

for idx,item in enumerate(list): 
0

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

+2

Je ne suis pas sûr de savoir comment vous comptez compter ici. Count est utilisé pour générer des séquences de nombres. –

+0

mais comment réinitialiser la valeur pour l'itération suivante. L'utilisation de itertools.count() n'est pas réalisable ici. – javed

43

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 mis en commentaire la variable count dans votre code.

+0

D'accord. Laissez-moi le corriger. –

+0

Vous pouvez également utiliser le paramètre facultatif 'start' de' enumerate' pour commencer à énumérer avec 1 au lieu de 0, bien que j'utilise le nom de l'OP 'count' au lieu de' idx'. –

+0

Je n'avais aucune idée qu'il existe un paramètre de démarrage facultatif. Bon à savoir. Merci –

0

Je sais plutôt question ancienne mais .... suis tombé à la recherche d'autre chose si je donne mon coup:

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

Ceci est également possible en utilisant zip().

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

mais ne pas utiliser cette approche avec de grands itérateurs .. – wom