在python中打印和格式化列表

时间:2012-06-04 15:52:47

标签: python string-formatting

我目前正在使用以下代码

print "line 1     line2"
for h, m in zip(human_score, machine_score):
    print "{:5.1f}      {:5.3f}".format(h,m)

但是在标题中使用“第1行”和“第2行”之间的空格可能不是一个好习惯。而且我不确定如何在每行之前添加可变数量的空格,以便我可以在底部放置“mean”和“std”,并使这两个数字与上面的列表一致。

例如,我希望它像这样打印:

       Line 1      Line 2
         -6.0      7.200
         -5.0      6.377
        -10.0      14.688
         -5.0      2.580
         -8.0      8.421
         -3.0      2.876
         -6.0      9.812
         -8.0      6.218
         -8.0      15.873
          7.5      -2.805
Mean:  -0.026      7.26 
Std:    2.918      6.3

最狡猾的做法是什么?

5 个答案:

答案 0 :(得分:2)

只需使用较大的字段大小,例如,使用标题:

print "{:>17} {:>17s}".format('line1', 'line2')

以及您的号码:

print "{:>17.1f}      {:>12.3f}".format(h,m)

你的页脚:

print 
print "Mean: {:11.2f}      {:12.3f}".format(-0.026, 7.26)
print "Std : {:11.2f}      {:12.3f}".format(2.918, 6.3)

会给你

            line1             line2
             -6.0             7.200
             -5.0             6.377
            -10.0            14.688
             -5.0             2.580
             -8.0             8.421
             -3.0             2.876
             -6.0             9.812
             -8.0             6.218
             -8.0            15.873
              7.5            -2.805

Mean:       -0.03             7.260
Std :        2.92             6.300

您可以根据需要调整字段宽度值。

答案 1 :(得分:1)

对标题使用与数据相同的打印技术,将标题字视为字符串。

答案 2 :(得分:1)

您最初的问题是如何避免在格式字符串中的字段之间放置任意空格。你是对的,试图避免这种情况。更灵活的是不对列的填充宽度进行硬编码。

您可以使用格式字符串外部定义的WIDTH“常量”来执行这两项操作。然后宽度作为参数传递给format函数,并插入到替换字段内的另一组括号中的格式字符串中:{foo:>{width}}

如果您想更改列宽,只需更改“常量”WIDTH

human_score = [1.23, 2.32,3.43,4.24]
machine_score = [0.23, 4.22,3.33,5.21]
WIDTH = 12
mean = "Mean:"
std = "Std:"
print '{0:>{width}}{1:>{width}}'.format('line 1', 'line 2', width=WIDTH)
for h, m in zip(human_score, machine_score):
    print "{:>{width}.1f}{:>{width}.3f}".format(h,m, width=WIDTH)

print "{mean}{:>{width1}.2f}{:>{width2}.3f}".format(-0.026, 7.26, width1=WIDTH-len(mean), width2=WIDTH, mean=mean)
print "{std}{:>{width1}.2f}{:>{width2}.3f}".format(-2.918, 6.3, width1=WIDTH-len(std), width2=WIDTH, std=std)

输出:

      line 1      line 2
         1.2       0.230
         2.3       4.220
         3.4       3.330
         4.2       5.210
Mean:  -0.03       7.260
Std:   -2.92       6.300

答案 3 :(得分:0)

您可以使用ljustrjust

一些例子diveintopython

答案 4 :(得分:0)

使用str.rjust和str.ljust并将其与得分中的数字相关联。