我知道在Python中,"%02d到%02d"%(i,j)
可以将i
和j
补零。
但是,我想知道是否有任何方法可以在格式字符串中动态地补零(我有一个数字列表,我希望零填充大小等于该列表中最长数字的长度)。
我知道我可以使用zfill
,但我希望能够在格式化字符串中完成整个操作。
我知道在Python中,"%02d到%02d"%(i,j)
可以将i
和j
补零。
但是,我想知道是否有任何方法可以在格式字符串中动态地补零(我有一个数字列表,我希望零填充大小等于该列表中最长数字的长度)。
我知道我可以使用zfill
,但我希望能够在格式化字符串中完成整个操作。
使用字符串格式化的str.format()
方法替代:
'{number:0{width}d}'.format(width=2, number=4)
演示:
>>> '{number:0{width}d}'.format(width=2, number=4)
'04'
>>> '{number:0{width}d}'.format(width=8, number=4)
'00000004'
str.format()
格式化规范允许多次使用,其中替换字段可以填充格式化规范的参数。
在上面的示例中,硬编码的填充宽度规范看起来像:
'{:02d}'.format(4)
或者'{number:02d}'.format(number=4)
通过使用命名参数,我只需将2
宽度说明符替换为另一个替换字段即可。
要使用旧式的%
字符串格式化获取相同的效果,您需要使用*
宽度字符:
'%0*d' % (width, number)
但这只能用于值的元组(不支持字典格式),并且仅适用于字段宽度;格式中的其他参数不支持动态参数。
>>> print "%0*d" % (5, 4)
00004
>>> print "%0*d" % (10, 4)
0000000004
number, width = 4, 2
,则f"{number:0{width}d}"
会产生'04'
。 - Martijn Pieters