2009-03-13 5 views
20

Кто-нибудь знает, что волшебство я должен использовать, чтобы изменить список х:Python - список преобразования

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

в у список?

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

Спасибо всем заранее за помощь мне ...

ответ

33

Вы можете использовать список понимание (Python 2.6+):

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

Или для Python до 2.6:

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

Редактировать: Пропустил тот факт, что вам нужна нулевая прокладка ...

+0

Интересно, я не слышал об этом синтаксисе «{0: 0> 2}». Является ли он охвачен любым PEP или другим документом? – Rodrigo

+0

Это новый синтаксис, который (предположительно) предназначен для постепенного замены синтаксиса%. На самом деле это очень хорошо для некоторых вещей, и я решил использовать его в своем коде, но он по-прежнему выглядит странно для меня, так долго, используя%. Подробнее здесь: http://docs.python.org/library/string.html#formatstrings – DNS

15

Вы хотите использовать встроенный в map функции:

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

EDIT Вы изменили требования на меня! Для того, чтобы отобразить его ведущие нули, вы делаете это:

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

, что точка с запятой смотрит на меня! прекратите! –

+0

Whooops! Старые привычки умирают с трудом. –

+0

И если я хотел бы добавить ноль, если число является одной цифрой, и я хочу, чтобы мои номера были по 2 цифры каждый? – elfuego1

0

чтобы получить 0's:

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

Я хотел бы использовать список понимание себя, но здесь другое решение, используя карту для тех, кто заинтересован ...

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

Альтернативой строк формата будет использовать zfill струны () метод:

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

Другое дело: вы можете быть после заполнения на основе наибольшего элемента в списке, так что вместо того, чтобы просто используя 2, вы можете сделать:

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

Попробуйте это:

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

rjust как метод строкового класса, принимает целочисленный аргумент (длина результата) и опциональный символ заполнения

Смежные вопросы