J'utilise Python 2.5, je veux une énumération comme celle-ci (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 python2.5 vous ne pouvez pas ...
En utilisant python2.5:
>>> h = enumerate(range(2000, 2005))
>>> [x for x in h]
[(0, 2000), (1, 2001), (2, 2002), (3, 2003), (4, 2004)]
Quelqu'un connaît-il un moyen d'obtenir le résultat souhaité dans Python 2.5?
Merci,
Jeff
Réponses:
Comme vous l'avez déjà mentionné, c'est simple à faire dans Python 2.6 ou plus récent:
Python 2.5 et les versions antérieures ne prennent pas en charge le
start
paramètre, vous pouvez donc créer deux objets de plage et les compresser:Résultat:
Si vous souhaitez créer un générateur au lieu d'une liste, vous pouvez utiliser izip à la place.
la source
izip
etxrange
serait plus proche d'énumérerenumerate(iterable, start=1)
partir de Python 2.6.Juste pour mettre ceci ici pour la postérité, dans 2.6 le paramètre "start" a été ajouté pour énumérer comme ceci:
enumerate(sequence, start=1)
la source
sequence[i]
dans votre code.Facile, définissez simplement votre propre fonction qui fait ce que vous voulez:
la source
Python 3
Documentation officielle:
enumerate(iterable, start=0)
Donc, vous l'utiliseriez comme ceci:
la source
Le moyen le plus simple de faire en Python 2.5 exactement ce que vous demandez:
Si vous voulez une liste, comme vous semblez, utilisez
zip
à la place deit.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ôtlist(X)
).la source
Fonctionne maintenant
h = list(enumerate(xrange(2000, 2005), 1))
.la source
enumerate est trivial, tout comme la réimplémentation pour accepter un début:
Notez que cela n'interrompt pas le code en utilisant enumerate sans argument de démarrage.
Alternativement, cet oneliner peut être plus élégant et peut-être plus rapide, mais rompt d'autres utilisations d'énumérer:Ce dernier était un pur non-sens. @Duncan a obtenu le bon wrapper.
la source
la source
h = [(i + 1, x) for i, x in enumerate(xrange(2000, 2005))]
la source
++
: c'est la façon de le faireOk, je me sens un peu stupide ici ... quelle est la raison de ne pas le faire avec quelque chose comme ça
[(a+1,b) for (a,b) in enumerate(r)]
? Si vous ne fonctionnerez pas, pas de problème non plus:la source
Comme c'est un peu verbeux, je vous recommande d'écrire votre propre fonction pour la généraliser:
la source
Je ne sais pas comment ces publications pourraient être rendues plus compliquées que les suivantes:
la source