Estoy usando Python 2.5, quiero una enumeración como esta (comenzando en 1 en lugar de 0):
[(1, 2000), (2, 2001), (3, 2002), (4, 2003), (5, 2004)]
Sé que en Python 2.6 puedes hacer: h = enumerate (range (2000, 2005), 1) para dar el resultado anterior, pero en python2.5 no puedes ...
Usando python2.5:
>>> h = enumerate(range(2000, 2005))
>>> [x for x in h]
[(0, 2000), (1, 2001), (2, 2002), (3, 2003), (4, 2004)]
¿Alguien sabe una manera de obtener ese resultado deseado en Python 2.5?
Gracias,
Jeff
Respuestas:
Como ya mencionó, esto es sencillo de hacer en Python 2.6 o posterior:
Python 2.5 y versiones anteriores no admiten el
start
parámetro, por lo que podría crear dos objetos de rango y comprimirlos:Resultado:
Si desea crear un generador en lugar de una lista, puede usar izip en su lugar.
fuente
izip
yxrange
estaría más cerca de enumerarenumerate(iterable, start=1)
partir de Python 2.6.Solo para poner esto aquí por el bien de la posteridad, en 2.6 se agregó el parámetro "inicio" para enumerar así:
enumerate(sequence, start=1)
fuente
sequence[i]
en su código.Fácil, solo defina su propia función que haga lo que quiera:
fuente
Python 3
Documentación oficial:
enumerate(iterable, start=0)
Entonces lo usarías así:
fuente
La forma más simple de hacer en Python 2.5 exactamente lo que preguntas:
Si desea una lista, como parece, úsela
zip
en lugar deit.izip
.(Por cierto, como regla general, la mejor manera de hacer una lista de un generador o cualquier otra X iterable no es
[x for x in X]
, sino más bienlist(X)
).fuente
Ahora
h = list(enumerate(xrange(2000, 2005), 1))
funcionafuente
enumerar es trivial y, por lo tanto, volver a implementarlo para aceptar un inicio:
Tenga en cuenta que esto no rompe el código usando enumerate sin argumento de inicio.
Alternativamente, este oneliner puede ser más elegante y posiblemente más rápido, pero rompe otros usos de enumerate:Lo último era pura tontería. @Duncan tiene la envoltura correcta.
fuente
fuente
h = [(i + 1, x) for i, x in enumerate(xrange(2000, 2005))]
fuente
++
: esa es la manera de hacerloOk, me siento un poco estúpido aquí ... ¿cuál es la razón para no hacerlo con algo así
[(a+1,b) for (a,b) in enumerate(r)]
? Si no va a funcionar, tampoco hay problema:fuente
Como esto es algo detallado, recomiendo escribir su propia función para generalizarla:
fuente
No sé cómo estas publicaciones podrían hacerse más complicadas que las siguientes:
fuente