格式数字可变长度

时间:2014-12-14 19:33:30

标签: python python-3.x format

我在列表中有一堆数字,并希望以漂亮的方式打印它们,以便它们在右侧对齐。

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))

有更好的方法吗?

4 个答案:

答案 0 :(得分:3)

您可以将变量传递到str.format,您无需创建模板:

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

答案 1 :(得分:0)

  

LEN(STR(最大值(数字))

为您提供最大数字的长度,因此您可以使用此

答案 2 :(得分: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

答案 3 :(得分: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))