0

我目前正在使用以下代码

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

这样做的最pythonic方式是什么?

4

5 回答 5

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

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

于 2012-06-04T16:09:48.860 回答
1

您最初的问题是关于如何避免在格式字符串中的字段之间放置任意空格。您尝试避免这种情况是正确的。不硬编码列的填充宽度会带来更大的灵活性。

您可以通过使用在格式字符串之外定义的 WIDTH 'constant' 来做到这两点。然后将宽度作为参数传递给格式函数,并在替换字段内的另一组大括号中插入格式字符串{foo:>{width}}

如果要更改列宽,只需更改 'constant' 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
于 2012-06-04T19:34:40.710 回答
1

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

于 2012-06-04T15:55:46.653 回答
0

您可以使用ljustrjust

一些例子潜入python

于 2012-06-04T15:58:19.140 回答
0

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

于 2015-05-09T12:03:22.683 回答