2014-12-14 5 views
0

У меня есть куча чисел в списке и вы хотите напечатать их красиво, чтобы они были выровнены с правой стороны.номера формата с переменной длиной

numbers = [192829, 88288, 912, 1992, 2828, 38] 
for number in numbers: 
    print("{:6d}".format(number)) 

Это дает мне:

192829 
88288 
    912 
    1992 
    2828 
    38 

Это работает, потому что я знал, что самый длинный номер 6 цифр, так что я жёстко 6: "{:6d}"

Что делать, если я не знаю, самый длинный номер. Единственное решение, о котором я могу думать, следующее.

length = len(str(max(numbers))) 
output_template = "{:" + str(length) + "d}" 
for number in numbers: 
    print(output_template.format(number)) 

Есть ли лучший способ?

+0

лучший способ? На самом деле это хороший способ, ни один из других способов не может быть лучше, чем функция _max_. – GLHF

+0

Если вы не можете предсказать максимальное число, нет способа сделать лучше, чем max. –

+0

Пока ваши цифры не будут отрицательными. – khelwood

ответ

3

Вы можете передать переменную в str.format, вам не нужно, чтобы создать шаблон:

numbers = [192829, 88288, 912, 1992, 2828, 38] 
for number in numbers: 
    print("{0:{1}d}".format(number,len(str(max(numbers))))) 
0

LEN (Str (макс (номера))

дает вам длину из общего числа, поэтому вы можете использовать это

0

это вы можете попробовать:

>>> numbers = [192829, 88288, 912, 1992, 2828, 38] 
>>> length = len(str(max(numbers))) # max give you larget number and len find its length 
>>> for x in numbers: 
...  print("{:{}d}".format(x,length)) 
... 
192829 
88288 
    912 
    1992 
    2828 
    38 
0

Вот еще один способ;

numbers = [192829, 88288, 912, 1992, 2828, 38,4536,3564576,2342342] 
maxlen=len(max(str(numbers),key=len)) 
print (("{:^{dif}}\n"*len(numbers)).format(*numbers,dif=maxlen)) 
+0

нет необходимости использовать key = length, поскольку число, которое будет max, очевидно, что имеет максимальное количество цифр – Hackaholic

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