如何右对齐数字数据?
Posted
技术标签:
【中文标题】如何右对齐数字数据?【英文标题】:How to right-align numeric data? 【发布时间】:2010-11-26 23:40:53 【问题描述】:我有一些数据以 3 列格式显示,格式如下:
key: value key: <tab> key: value <tab> key: value
。
这是一个例子:
p: 1 sl: 10 afy: 4
q: 12 lg: 10 kla: 3
r: 0 kl: 10 klw: 3
s: 67 vw: 9 jes: 3
t: 16 uw: 9 skw: 3
u: 47 ug: 9 mjl: 3
v: 37 mj: 8 lza: 3
w: 119 fv: 8 fxg: 3
x: 16 fl: 8 aew: 3
但是,我希望数字是否完全对齐,例如:
a: 1
b: 12
c: 123
如何在 Python 中做到这一点?
这是我现有的打印代码:
print(str(chr(i+ord('a'))) + ": " + str(singleArray[i]) + "\t" +
str(doubleArray[i][0]) + ": " + str(doubleArray[i][1]) + "\t" +
str(tripleArray[i][0]) + ": " + str(tripleArray[i][1]))
【问题讨论】:
【参考方案1】:在 Python 2.5 中使用 rjust(在字符串上)。此外,尝试习惯使用 python 中的string formatting,而不仅仅是连接字符串。下面是 rjust 和字符串格式的简单示例:
width = 10
str_number = str(ord('a'))
print 'a%s' % (str_number.rjust(width))
【讨论】:
【参考方案2】:如果您知道数字的上限,则可以使用"%<lenght>d" % n
进行格式化。鉴于所有这些计算都已完成并在 (char, num) 的列表中:
mapping = ((chr(i+ord('a')), singleArray[i]),
(doubleArray[i][0],doubleArray[i][1]),
(tripleArray[i][0],tripleArray[i][1])
)
for row in mapping:
print "%s: %3d" % row
【讨论】:
【参考方案3】:使用 python 字符串格式:'%widths'
其中宽度是整数
>>> '%10s' % 10
' 10'
>>> '%10s' % 100000
' 100000'
【讨论】:
对于左对齐使用 '%-10s' (只是添加这个,因为它是左对齐的顶部 Google 结果)【参考方案4】:在 python 2.6+(它是 3 中的标准方法)中,字符串格式化的“首选”方法是使用 string.format()(可以找到完整的文档here)。 正确的理由可以用
"a string 0:>5".format(foo)
这将使用 5 个位置,但是
"a string 0:>1".format(foo, width)
也是有效的,并将使用传递给 .format() 的值宽度。
【讨论】:
我不知道为什么这个答案被投票,因为它不正确 - 对于右对齐/对齐,必须使用":>5"
其中>
表示右对齐(默认对于字符串是<
,或左对齐)。幸运的是,链接到的文档清楚地说明了这一点。 (编辑:没关系,我会修复答案并将其留作参考。)
它已被投票,因为">" 是数字“对齐”字段的默认值,而问题是关于数字的。不过,您是对的,将其明确化会更好。
过失。我发现这个问题是因为我试图右对齐字符串,并且我没有仔细阅读 OP 问题以发现只有数字被打印。感谢您的澄清。【参考方案5】:
在 Python 3.6 中你可以使用Literal String Interpolation,它更少 冗长且使用起来可能更直观:
width = 5
number = 123
print (f'number:>width')
或者只是:
number = 123
print (f'number:>5')
它重用了大部分 str.format()
语法。
我猜/希望这将是未来的首选方式。
【讨论】:
GitHub:Using f-strings style literal string interpolation without Python 3.6以上是关于如何右对齐数字数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何自动调整大小和WPF右对齐GridViewColumn数据