显示前导零的数字

ash*_*her 819 python integer string-formatting

鉴于:

a = 1
b = 10
c = 100
Run Code Online (Sandbox Code Playgroud)

如何为少于两位数的所有数字显示前导零?

那是,

01
10
100
Run Code Online (Sandbox Code Playgroud)

Jac*_* M. 912

在Python 2中,您可以:

print "%02d" % (1,)
Run Code Online (Sandbox Code Playgroud)

基本上%就像printfsprintf.


对于Python 3 +,可以通过以下方式实现相同的行为:

print("{:02d}".format(1))
Run Code Online (Sandbox Code Playgroud)

对于Python 3.6+,使用f-strings可以实现相同的行为:

print(f"{1:02d}")
Run Code Online (Sandbox Code Playgroud)

  • 示例:为5位邮政编码打印"%05d"%result ['postalCode']. (8认同)
  • 详细说明,[docs](https://docs.python.org/2/library/string.html#format-specification-mini-language) 在这里解释了这一点:“当没有给出明确的对齐方式时,在宽度字段之前由零 ('0') 字符启用数字类型的符号感知零填充。这相当于填充字符为 '0' 且对齐类型为 '='。 (5认同)
  • 也许。在 2.7.6 中,如果格式值不是元组(至少对于这个例子),也不例外。看看我的评论日期,我想我当时运行的是 2.7.3,当时我不知道将单个变量放在元组中可以让您在使用 % 字符串格式化程序时处于安全状态。 (3认同)
  • `x ="%02d.txt"%i`引发TypeError(不能连接'str'和'int'对象),但是`x ="%02d.txt"%(i,)`没有.有趣.我想知道在哪里记录 (2认同)
  • @theta 在 2.7.6 中,我没有收到错误消息。也许这是他们已经修复的特定 Python 版本中的错误? (2认同)

Dat*_*eek 863

你可以使用str.zfill:

print str(1).zfill(2) 
print str(10).zfill(2) 
print str(100).zfill(2) 
Run Code Online (Sandbox Code Playgroud)

打印:

01
10
100
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个解决方案,因为它不仅有助于输出数字,还有助于将其分配给变量...例如x = str(datetime.date.today().month).zfill(2)将返回x为feb月的'02'. (65认同)
  • 这应该是正确的答案,因为“{1:02d}”不能用变量代替“2”(就像您正在创建动态函数一样)。 (3认同)
  • @JoshuaVarghese 它可以有变量:`"{0:0{1}}"`。传递任意数量的零作为第二个参数。 (3认同)

Ber*_*Ber 358

在Python 2.6+和3.0+中,您将使用format()字符串方法:

for i in (1, 10, 100):
    print('{num:02d}'.format(num=i))
Run Code Online (Sandbox Code Playgroud)

或使用内置(对于单个数字):

print(format(i, '02d'))
Run Code Online (Sandbox Code Playgroud)

有关新的格式化功能,请参阅PEP-3101文档.

  • 也适用于Python 2.7.5.如果您不想使用命名参数,也可以使用"{:02d}".format(1). (29认同)

Kre*_*mir 125

print('{:02}'.format(1))
print('{:02}'.format(10))
print('{:02}'.format(100))
Run Code Online (Sandbox Code Playgroud)

打印:

01
10
100
Run Code Online (Sandbox Code Playgroud)

  • 仅与Python 3兼容.如果使用Python 2.7,请执行`print'{:02}'.format(1)` (2认同)

小智 89

或这个:

print '{0:02d}'.format(1)


Jim*_*ard 65

Python> = 3.6中,您可以使用以下引入的新f字符串简洁地执行此操作:

f'{val:02}'
Run Code Online (Sandbox Code Playgroud)

它打印用名称的变量val具有fill的值0width2.

对于您的具体示例,您可以在循环中很好地执行此操作:

a, b, c = 1, 10, 100
for val in [a, b, c]:
    print(f'{val:02}')
Run Code Online (Sandbox Code Playgroud)

打印:

01 
10
100
Run Code Online (Sandbox Code Playgroud)

有关f-strings的更多信息,请参阅PEP 498.


nos*_*klo 53

x = [1, 10, 100]
for i in x:
    print '%02d' % i
Run Code Online (Sandbox Code Playgroud)

结果是:

01
10
100
Run Code Online (Sandbox Code Playgroud)

在文档中使用%阅读有关字符串格式的更多信息.

  • 文档示例很糟糕.他们使用前导零样本投射映射,因此除非您已经知道它是如何工作的,否则很难知道哪个是哪个.实际上,这就是把我带到这里的原因. (9认同)

ZuL*_*uLu 47

Pythonic的方法:

str(number).rjust(string_width, fill_char)
Run Code Online (Sandbox Code Playgroud)

这样,如果原始字符串的长度大于string_width,则返回原始字符串.例:

a = [1, 10, 100]
for num in a:
    print str(num).rjust(2, '0')
Run Code Online (Sandbox Code Playgroud)

结果:

01
10
100
Run Code Online (Sandbox Code Playgroud)


Win*_*lly 32

或另一种解决方案

"{:0>2}".format(number)
Run Code Online (Sandbox Code Playgroud)

  • 这将是Python方式,虽然为了清晰起见我会包含参数 - "{0:0> 2}".格式(数字)`,如果有人想要nLeadingZeros他们应该注意他们也可以这样做:``{0 :0> {1}}".format(number,nLeadingZeros + 1)` (3认同)

tho*_*own 13

它内置于 python 中,具有字符串格式

f'{number:02d}'
Run Code Online (Sandbox Code Playgroud)


Rob*_*rto 7

这就是我的做法:

str(1).zfill(len(str(total)))
Run Code Online (Sandbox Code Playgroud)

基本上 zfill 需要您要添加的前导零的数量,因此很容易取最大的数字,将其转换为字符串并获取长度,如下所示:

Python 3.6.5(默认,2018 年 5 月 11 日,04:00:52) 
[GCC 8.1.0] 在 Linux 上
输入“帮助”、“版权”、“信用”或“许可”以获取更多信息。
>>> 总数 = 100
>>> 打印(str(1).zfill(len(str(total))))
001
>>> 总数 = 1000
>>> 打印(str(1).zfill(len(str(total))))
0001
>>> 总计 = 10000
>>> 打印(str(1).zfill(len(str(total))))
00001
>>> 


Nic*_*ais 6

你可以用f strings来做到这一点。

import numpy as np

print(f'{np.random.choice([1, 124, 13566]):0>8}')
Run Code Online (Sandbox Code Playgroud)

这将打印 8 的恒定长度,并用前导填充其余部分0

00000001
00000124
00013566
Run Code Online (Sandbox Code Playgroud)


Air*_*Ltd 5

使用格式字符串 - http://docs.python.org/lib/typesseq-strings.html

例如:

python -c 'print "%(num)02d" % {"num":5}'
Run Code Online (Sandbox Code Playgroud)


小智 5

你还可以这样做:

'{:0>2}'.format(1)
Run Code Online (Sandbox Code Playgroud)

这将返回一个字符串。