Python字符串格式:填充负数

时间:2017-02-08 13:41:52

标签: python number-formatting

我想将整数格式化为字符串,这样,如果没有符号,它们将被填零以至少有两位数。

例如我想要

1
-1
10
-10

01
-01
10
-10

具体来说,我想要负数(3)和非负数(2)的不同最小字符串长度。详细here的简单数字填充不足。这可能吗?

5 个答案:

答案 0 :(得分:3)

您可以使用str.format,但在此处添加1以将负数考虑在内:

l = [1,-1,10,-10,4]

new_l = ["{1:0{0}d}".format(2 if x>=0 else 3,x) for x in l]

print(new_l)

结果:

['01', '-01', '10', '-10', '04']

它的工作原理是因为format接受嵌套表达式:你可以将格式({:02d}{:03d})作为格式项传递出来,这样可以省去格式化格式字符串的麻烦通过。

答案 1 :(得分:1)

根据here,类型描述符之前需要有一个空格,因此两者都

'% d'%(1)

'{: d}'.format(1)

产生(注意空格)

' 1'

与上面用-1调用的结果很好地对齐:

'-1'

答案 2 :(得分:0)

使用"{:03d}".format(n)。 0表示前导零,3表示字段宽度。可能不是完全你想要的东西:

>>> for n in (-123,-12,-1,0,1,12,123, 1234):
...   print( '{:03d}'.format(n) )
... 
-123
-12
-01
000
001
012
123
1234

答案 3 :(得分:0)

zfill实际上在左侧填充零,并考虑负数。

所以n.zfill(3 if n < 0 else 2)可以解决问题。

答案 4 :(得分:0)

我能想到的最简洁但可能有点不可读的方式(至少在 Python 3 中)是带有嵌套花括号的 formatted string literal,类似于已接受的答案。有了这个,接受的答案中的例子可以写成

l = [1, -1, 10, -10, 4]
new_l = [f"{x:0{2 + (x < 0)}d}" for x in l]
print(new_l)

结果相同:

['01', '-01', '10', '-10', '04']