Python 字符串格式:填充负数
Python string formatting: padding negative numbers
我想将我的整数格式化为字符串,这样在没有符号的情况下,它们将被零填充以至少有两位数。
比如我要
1
-1
10
-10
成为
01
-01
10
-10
具体来说,我想要负数 (3) 和非负数 (2) 的不同最小字符串长度。详细 here 中的简单数字填充是不够的。这可能吗?
您可以使用 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}
)作为格式项传递,从而省去了格式化格式字符串的麻烦第一关。
使用"{: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
根据here,类型描述符前需要一个space,所以两者
'% d'%(1)
和
'{: d}'.format(1)
结果(注意 space)
' 1'
与上面用 -1 调用的结果很好地对齐:
'-1'
zfill
实际上在左边用零填充并考虑负数。
所以 n.zfill(3 if n < 0 else 2)
就可以了。
我能想到的(至少在 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']
使用zfill
:
inp_list = [1,-1,10,-10,4]
out_list = [str(n).zfill(3 if n<0 else 2) for n in inp_list]
print(out_list)
结果:
['01', '-01', '10', '-10', '04']
我想将我的整数格式化为字符串,这样在没有符号的情况下,它们将被零填充以至少有两位数。
比如我要
1
-1
10
-10
成为
01
-01
10
-10
具体来说,我想要负数 (3) 和非负数 (2) 的不同最小字符串长度。详细 here 中的简单数字填充是不够的。这可能吗?
您可以使用 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}
)作为格式项传递,从而省去了格式化格式字符串的麻烦第一关。
使用"{: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
根据here,类型描述符前需要一个space,所以两者
'% d'%(1)
和
'{: d}'.format(1)
结果(注意 space)
' 1'
与上面用 -1 调用的结果很好地对齐:
'-1'
zfill
实际上在左边用零填充并考虑负数。
所以 n.zfill(3 if n < 0 else 2)
就可以了。
我能想到的(至少在 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']
使用zfill
:
inp_list = [1,-1,10,-10,4]
out_list = [str(n).zfill(3 if n<0 else 2) for n in inp_list]
print(out_list)
结果:
['01', '-01', '10', '-10', '04']