2009-03-13 10 views
20

Qualcuno sa cosa magica devo usare per modificare la lista x:Python - elenco trasformazione

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

in y elenco?

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

Grazie a tutti in anticipo per avermi aiutato ...

risposta

33

È possibile utilizzare una list comprehension (Python 2.6+):

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

O per Python prima di 2,6:

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

Modifica: mancava il fatto che volevi lo zero padding ...

+0

Interessante, non ho sentito di questa sintassi "{0: 0> 2}". È coperto da qualsiasi PEP o altro documento? – Rodrigo

+0

È una nuova sintassi che (presumibilmente) intende sostituire gradualmente la sintassi%. In realtà è molto bello per alcune cose, e ho deciso di usarlo nel mio codice, ma a me sembra ancora strano dopo così tanto tempo con%. Maggiori informazioni qui: http://docs.python.org/library/string.html#formatstrings – DNS

15

si desidera utilizzare il built-in funzione di map:

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

EDIT Hai cambiato i requisiti su di me! Per rendere visualizzare zeri iniziali, si esegue questa operazione:

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

che punto e virgola mi sta fissando! smettila! –

+0

Whooops! Le vecchie abitudini sono dure a morire. –

+0

E se mi piacerebbe aggiungere zero se il numero è una cifra e voglio che i miei numeri siano di 2 cifre ciascuno? – elfuego1

0

per ottenere gli 0:

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

vorrei usare una lista di comprensione me stesso, ma qui è un'altra soluzione usando la mappa per chi è interessato ...

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

Un'alternativa a stringhe di formato sarebbe quella di utilizzare zfill della stringa () metodo:

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

Un'altra cosa: si potrebbe essere dopo imbottitura sulla base del massimo elemento della lista, quindi invece di utilizzare 2, si potrebbe fare:

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

Prova questo:

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

rjust come metodo di classe string, prende un argomento intero (lunghezza risultato) e di un carattere di riempimento opzionale