2009-03-13 30 views
20

¿Alguien sabe qué magia tengo que usar para cambiar la lista x:Python - lista de transformación

x = [1,2,3,4,5,11]

en Y ¿lista?

y = [ '01', '02', '03', '04', '05', '11']

Gracias a todos de antemano por ayudarme ...

Respuesta

33

Se puede utilizar una lista por comprensión (Python 2.6+):

y = ["{0:0>2}".format(v) for v in x] 

O para Python antes de la 2.6:

y = ["%02d" % v for v in x] 

Editar: Perdió el hecho de que quería relleno cero ...

+0

Interesante, no he oído hablar de esta sintaxis "{0: 0> 2}". ¿Está cubierto en cualquier PEP u otro documento? – Rodrigo

+0

Es una nueva sintaxis que (supuestamente) está destinada a reemplazar gradualmente la sintaxis%. En realidad, es muy bueno para algunas cosas, y he hecho un punto de usarlo en mi código, pero todavía me parece extraño después de tanto tiempo usando%. Más información aquí: http://docs.python.org/library/string.html#formatstrings – DNS

15

que desea utilizar el incorporado en map función:

>>> x = [1,2,3,4,5] 
>>> x 
[1, 2, 3, 4, 5] 
>>> y = map(str, x) 
>>> y 
['1', '2', '3', '4', '5'] 

EDITAR Usted cambió los requisitos de mí! Para que sea mostrar ceros a la izquierda, esto se hace:

>>> x = [1,2,3,4,5,11] 
>>> y = ["%02d" % v for v in x] 
>>> y 
['01', '02', '03', '04', '05', '11'] 
+1

que punto y coma me está mirando! ¡para! –

+0

Whooops! Los viejos hábitos tardan en morir. –

+0

Y si me gustaría agregar cero si el número es de un dígito y quiero que mis números sean de 2 dígitos cada uno? – elfuego1

0

para obtener los 0:

y = ['%02d' % i for i in x] 
0
y = ['%02d'%v for v in x] 
6

me gustaría utilizar una lista por comprensión a mí mismo, pero aquí es otra solución en el mapa para los interesados ​​...

map(lambda v: "%02d" %v, x) 
0

Una alternativa a las cadenas de formato sería utilizar zfill de la cadena () método:

y = [str(i).zfill(2) for i in x] 

Otra cosa: es posible que después de que el relleno basado en el elemento más grande en la lista, así que en vez de usar sólo 2, que podría hacer:

pad_length = len(str(max(x))) 
y = [str(i).zfill(pad_length) for i in x] 
1

Prueba esto:

>>> [str(v).rjust(2,'0') for v in x] 
['01', '02', '03', '04', '05', '11'] 

rjust como un método de clase string, toma un argumento entero (longitud del resultado) y un carácter de relleno opcional