我目前正在使用以下代码
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
最狡猾的做法是什么?
答案 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)
您可以使用ljust
或rjust
一些例子diveintopython
答案 4 :(得分:0)
使用str.rjust和str.ljust并将其与得分中的数字相关联。