Python中格式字符串中动态计算的零填充。

20

我知道在Python中,"%02d到%02d"%(i,j)可以将ij补零。

但是,我想知道是否有任何方法可以在格式字符串中动态地补零(我有一个数字列表,我希望零填充大小等于该列表中最长数字的长度)。

我知道我可以使用zfill,但我希望能够在格式化字符串中完成整个操作。

2个回答

39

使用字符串格式化的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)

但这只能用于值的元组(不支持字典格式),并且仅适用于字段宽度;格式中的其他参数不支持动态参数。


1
使用f-strings时,是否有一种方法可以实现相同的结果(动态计算填充)? - albert
5
使用f-strings时,它的工作方式与此完全相同。假设有number, width = 4, 2,则f"{number:0{width}d}"会产生 '04' - Martijn Pieters

3
是的,这是可能的。
>>> print "%0*d" % (5, 4)
00004
>>> print "%0*d" % (10, 4)
0000000004

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接