在Python中居中格式化的整数行?

时间:2011-12-08 06:38:54

标签: python

我对Python有点新,涉及VB.NET,C和其他一些奇怪的语言,所以我发现之前使用的方法并不总是适用于Python。在这种情况下,我想将一系列整数值打印到列中,并以尽可能少的代码为中心。

使用普通字符串,这很简单:

print "%s|%s|%s|%s"   \
      % (s1.center(w), s2.center(x), s3.center(y), s4.center(z))

其中wz是一个整数值,指定字符串s1s4应该居中的字段宽度。


当我想使用%0.2x%4d等格式说明符时,对数字执行相同操作将不起作用,因为整数没有center函数。 / p>

使用更加面向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)


但如果我正确地接受了这种术语,那似乎就是“单声道”。什么是一个好的“pythonic”方式来做到这一点?它需要适用于Python 2.4和2.7(我在两种环境中工作)。

谢谢!

2 个答案:

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

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