如何右对齐数字数据?

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数据

Java中如何控制右对齐输出?

如何在表格单元格的中心右对齐数字?

如何在 ag-grid 中为数字右对齐文本

如何让 WPF DataGrid 单元格右对齐而不使新行上的可选区域变小?

Flex Datagrid 列对齐数字