218 votes

Comment énumérer une plage de nombres commençant à 1

J'utilise Python 2.5, je veux une énumération comme ça (commençant à 1 au lieu de 0) :

[(1, 2000), (2, 2001), (3, 2002), (4, 2003), (5, 2004)]

Je sais qu'en Python 2.6 vous pouvez faire : h = enumerate(range(2000, 2005), 1) pour donner le résultat ci-dessus mais en python 2.5 vous ne pouvez pas...

Utilisation de Python 2.5 :

>>> h = enumerate(range(2000, 2005))
>>> [x for x in h]
[(0, 2000), (1, 2001), (2, 2002), (3, 2003), (4, 2004)]

Est-ce que quelqu'un connaît un moyen d'obtenir le résultat souhaité en Python 2.5?

196voto

dhackner Points 701

Juste pour mettre ceci ici pour le bien de la postérité, en 2.6 le paramètre "start" a été ajouté pour énumérer comme suit :

enumerate(sequence, start=1)

14voto

Duncan Points 25356

Facile, il suffit de définir votre propre fonction qui fait ce que vous voulez :

def enum(seq, start=0):
    for i, x in enumerate(seq):
        yield i+start, x

10voto

Alex Martelli Points 330805

La façon la plus simple de faire en Python 2.5 exactement ce que vous demandez :

import itertools as it

... it.izip(it.count(1), xrange(2000, 2005)) ...

Si vous voulez une liste, comme vous le semblez, utilisez zip au lieu de it.izip.

(BTW, en règle générale, la meilleure façon de faire une liste à partir d'un générateur ou de tout autre X itérable n'est pas [x for x in X], mais plutôt list(X)).

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