我有 0 到(包括)100 范围内的整数。我想将它们转换为固定长度 3 的字符串,并带有空格填充和右侧对齐。
我尝试使用以下格式字符串,但它为三位数添加了另一个空格,这使得它们的长度为 4 而不是 3。
fmt = lambda x: "{: 3d}".format(x)
[fmt(99), fmt(100)] # produces [' 99', ' 100'] instead of [' 99', '100']
有趣的是,当使用零填充时它会按预期工作:
fmt = lambda x: "{:03d}".format(x)
[fmt(99), fmt(100)] # produces ['099', '100'] as expected
为什么是这样?我怎样才能解决这个问题?
我真的需要先转换为字符串吗?
fmt = lambda x: "{:>3s}".format(str(x))
[fmt(99), fmt(100)] # produces [' 99', '100'] as expected
默认情况下,数字右对齐并在格式化时用空格填充,因此您应该只指定width:
>>> '{:3d}'.format(99)
' 99'
>>> '{:3d}'.format(100)
'100'
或者,您可以同时指定fill性格和结盟:
>>> '{: >3d}'.format(99)
' 99'
>>> '{: >3d}'.format(100)
'100'
然而,宽度之前的单个空格被视为sign选项。引用文档 https://docs.python.org/3/library/string.html#formatspec:
符号选项仅对数字类型有效,并且可以是其中之一
下列的:
'+'
表示一个符号既可以表示积极的也可以表示积极的
负数。
'-'
表示符号只能用于负数
(这是默认行为)。
' '
表示前导空格
应该用于正数,负号用于负数
数字。
这就是为什么"{: 3d}"
示例中带有前导空格的格式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)