web-dev-qa-db-fra.com

Boucle dans la liste avec le contenu et l'index

Il est très courant pour moi de parcourir une liste python pour obtenir le contenu et leurs index. Ce que je fais habituellement est le suivant:

S = [1,30,20,30,2] # My list
for s, i in Zip(S, range(len(S))):
    # Do stuff with the content s and the index i

Je trouve cette syntaxe un peu moche, en particulier la partie à l'intérieur de la fonction Zip. Y a-t-il des manières plus élégantes/pythoniques de faire cela?

90
Oriol Nieto

Utilisez la fonction intégrée enumerate: http://docs.python.org/library/functions.html#enumerate

62
BrenBarn

Utilisez enumerate() :

>>> S = [1,30,20,30,2]
>>> for index, elem in enumerate(S):
        print(index, elem)

(0, 1)
(1, 30)
(2, 20)
(3, 30)
(4, 2)
166
Ashwini Chaudhary

Comme tout le monde:

for i, val in enumerate(data):
    print i, val

mais aussi

for i, val in enumerate(data, 1):
    print i, val

En d'autres termes, vous pouvez spécifier valeur initiale pour l'index/le nombre généré par enumerate ( ) qui est pratique si vous ne voulez pas que votre index commence par la valeur par défaut de zéro.

J'imprimais des lignes dans un fichier l'autre jour et j'ai spécifié la valeur de départ à 1 pour enumerate(), ce qui était plus logique que 0 lors de l'affichage d'informations sur une ligne spécifique à l'utilisateur.

21
Levon

enumerate c'est ce que vous voulez:

for i, s in enumerate(S):
    print s, i
3
Adam Wagner
>>> for i, s in enumerate(S):
3
fraxel

enumerate() rend ce plus joli:

for index, value in enumerate(S):
    print index, value

Voir ici pour plus.

3
Rob Volgman