215 votes

Itérer une liste avec des index en Python

Je jurerais avoir déjà vu la fonction (ou la méthode) qui prend une liste, comme ceci [3, 7, 19] et le transforme en une liste itérable de tuples, comme ceci : [(0,3), (1,7), (2,19)] pour l'utiliser à la place :

for i in range(len(name_of_list)):
    name_of_list[i] = something

mais je n'arrive pas à me souvenir du nom et la recherche sur Google de "liste d'itérations" ne donne rien.

387voto

Vinko Vrsalovic Points 116138
>>> a = [3,4,5,6]
>>> for i, val in enumerate(a):
...     print i, val
...
0 3
1 4
2 5
3 6
>>>

112voto

PierreBdR Points 11479

Yep, ce serait le enumerate fonction ! Ou plus précisément, vous devez le faire :

list(enumerate([3,7,19]))

[(0, 3), (1, 7), (2, 19)]

2 votes

Parfois, les gens posent une question liée à celle qu'ils veulent vraiment, d'autres fois, ils sont quelque peu indiscriminés sur ce que signifie "le meilleur".

3 votes

Et parfois, les gens ne lisent que la première ligne et demie de la question au lieu de la lire en entier. Si vous arrivez à la fin de la deuxième ligne, il dit qu'il veut l'utiliser à la place de for i in range(len(name_of_list)): C'est ce qui m'a amené à fournir un exemple utilisant un for au lieu de ce qui était montré dans la première partie.

1 votes

@HumphreyBogart Parce que Lauren Bacall aime être plus verbeuse.

25voto

S.Lott Points 207588

En voici un autre qui utilise le zip fonction.

>>> a = [3, 7, 19]
>>> zip(range(len(a)), a)
[(0, 3), (1, 7), (2, 19)]

10 votes

enumerate() est un peu plus élégant, je pense.

14 votes

@Nathan : Mais zip() est plus général et fonctionne pour des paires arbitraires de listes, donc c'est bon à savoir.

8voto

Lucas Ribeiro Points 1014

Voici une solution utilisant la fonction map :

>>> a = [3, 7, 19]
>>> map(lambda x: (x, a[x]), range(len(a)))
[(0, 3), (1, 7), (2, 19)]

Et une solution utilisant les compréhensions de listes :

>>> a = [3,7,19]
>>> [(x, a[x]) for x in range(len(a))]
[(0, 3), (1, 7), (2, 19)]

5voto

Harun ergül Points 13

Python enumerate la fonction sera conforme à vos exigences

result = list(enumerate([1,3,7,12]))
print result

sortie

[(0, 1), (1, 3), (2, 7),(3,12)]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X