我想将整数格式化为字符串,这样,如果没有符号,它们将被填零以至少有两位数。
例如我想要
1
-1
10
-10
是
01
-01
10
-10
具体来说,我想要负数(3)和非负数(2)的不同最小字符串长度。详细here的简单数字填充不足。这可能吗?
答案 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)
答案 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']