2009-03-13 6 views
20

Quelqu'un sait quelle magie je dois utiliser pour modifier la liste des x:Python - transformation Liste

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

en y liste?

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

Merci à tous à l'avance pour me aider ...

Répondre

33

Vous pouvez utiliser une compréhension de la liste (Python 2.6+):

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

Ou pour Python avant 2.6:

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

Modifier: Manqué le fait que vous vouliez zéro-padding ...

+0

Intéressant, je n'ai pas entendu parler de cette syntaxe "{0: 0> 2}". Est-ce couvert par un PEP ou un autre document? – Rodrigo

+0

C'est une nouvelle syntaxe censée remplacer (progressivement) la syntaxe%. C'est en fait très agréable pour certaines choses, et je me suis fait un devoir de l'utiliser dans mon code, mais cela me semble toujours bizarre après avoir longtemps utilisé%. Plus d'infos ici: http://docs.python.org/library/string.html#formatstrings – DNS

15

Vous souhaitez utiliser le haut-map fonction:

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

EDIT Vous avez changé les exigences sur moi! Pour faire afficher des zéros à gauche, vous faites ceci:

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

que point-virgule me regarde! arrête ça! –

+0

Whooops! Les vieilles habitudes ont la vie dure. –

+0

Et si je voudrais ajouter zéro si le chiffre est un chiffre et que je veux que mes chiffres soient à 2 chiffres chacun? – elfuego1

0

pour obtenir les 0:

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

J'utiliseriez une compréhension liste moi-même, mais voici une autre solution en utilisant la carte pour les personnes intéressées ...

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

Une alternative aux chaînes de format serait d'utiliser la zfill de la chaîne () méthode:

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

Une autre chose: vous pourriez être après un rembourrage sur la base du plus grand élément de la liste, au lieu d'utiliser 2, vous pouvez faire:

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

Essayez ceci:

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

rjust comme méthode de classe de chaîne, prend un argument entier (longueur de résultat) et un caractère de remplissage en option