moo*_*eep 4 python string-formatting
我有0到100(包括)100范围内的整数.我想将它们转换为固定长度为3的字符串,空格填充和右对齐.
我尝试使用以下格式字符串,但它为三位数字添加了另一个空格,这使得它们的长度为4而不是3.
fmt = lambda x: "{: 3d}".format(x)
[fmt(99), fmt(100)] # produces [' 99', ' 100'] instead of [' 99', '100']
Run Code Online (Sandbox Code Playgroud)
有趣的是,当使用零填充时,它按预期工作:
fmt = lambda x: "{:03d}".format(x)
[fmt(99), fmt(100)] # produces ['099', '100'] as expected
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我怎样才能解决这个问题?
我真的需要先转换为字符串吗?
fmt = lambda x: "{:>3s}".format(str(x))
[fmt(99), fmt(100)] # produces [' 99', '100'] as expected
Run Code Online (Sandbox Code Playgroud)
Eug*_*ash 10
默认情况下,数字在右侧对齐并在格式化时用空格填充,因此您应该只指定宽度:
>>> '{:3d}'.format(99)
' 99'
>>> '{:3d}'.format(100)
'100'
Run Code Online (Sandbox Code Playgroud)
或者,您可以指定填充字符和对齐方式:
>>> '{: >3d}'.format(99)
' 99'
>>> '{: >3d}'.format(100)
'100'
Run Code Online (Sandbox Code Playgroud)
但是,宽度之前的单个空格被视为符号选项.引用文档:
sign选项仅对数字类型有效,可以是以下之一:
'+'表示标志应该用于正数和负数.
'-'表示标志应仅用于负数(这是默认行为).
' '表示应在正数上使用前导空格,在负数上使用减号.
这就是为什么"{: 3d}"在示例中使用前导空格进行格式化的原因.
| 归档时间: |
|
| 查看次数: |
3371 次 |
| 最近记录: |