我对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
函数。 / 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(我在两种环境中工作)。
谢谢!
答案 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))