如何在Python中居中格式化的整数行?
我刚接触Python,之前玩过VB.NET、C语言和一些其他语言,所以发现以前的做法不一定适用于Python。在这种情况下,我想把一系列整数值打印成列,并尽量用少量代码让它们居中。
用普通字符串来做这件事很简单,比如:
print "%s|%s|%s|%s" \
% (s1.center(w), s2.center(x), s3.center(y), s4.center(z))
这里的 w
到 z
是一些整数值,用来指定字符串 s1
到 s4
应该居中的宽度。
但是当我想用格式说明符,比如 %0.2x
或 %4d
来处理数字时,就不行了,因为整数没有 center
这个功能。
如果用更像C语言的方式,我可以单独转换每个整数:
s1 = str("%0.4x" % (i)).center(w)
s2 = str("%0.2x" % (i)).center(x)
s3 = str("%0.2x" % (i)).center(y)
s4 = str("%0.8x" % (i)).center(z)
print "%s|%s|%s|%s" % (s1, s2, s3, s4)
但这样做似乎不太符合“Python风格”,如果我理解得没错的话。那么,有什么好的“Python风格”的方法来做到这一点呢?需要能够在Python 2.4和2.7中都能用(我在这两个环境中工作)。
谢谢!
2 个回答
1
你可以强调每个值都是以相同的方式进行格式化的:
def as_output_field(value, width):
return ('%0.4d' % value).center(width)
而且你可以通过数据驱动的方式来处理宽度和数值:
values = [s1,s2,s3,s4]
widths = [w,x,y,z]
你还可以强调你的格式由一堆相似的字段组成,这些字段之间用一个共同的字符分隔:
print '|'.join(as_output_field(value, width) for value, width in zip(values, widths))
1
ints = [1, 2, 3, 4]
widths = [(4, w), (2, x), (2, y), (8, z)]
for i in ints:
print "%s|%s|%s|%s" % tuple(((("%0." + str(padding) + "d") % (i)).center(width)) for padding, width in widths)
在widths
这个列表里,每个元组都是一个包含两个部分的东西,分别是(填充,宽度)。这里的填充是用来格式化字符串的,比如用"%0.[padding]d"
这样的方式来显示数字。