显示带有前导零的数字[重复]
- 2024-12-05 08:38:00
- admin 原创
- 132
问题描述:
如何为所有少于两位数的数字显示前导零?
1 → 01
10 → 10
100 → 100
解决方案 1:
在 Python 2 (和 Python 3) 中你可以执行以下操作:
number = 1
print("%02d" % (number,))
基本上%就像printf
或sprintf
(参见文档)。
对于 Python 3.+,也可以通过以下方式实现相同的行为format
:
number = 1
print("{:02d}".format(number))
对于 Python 3.6+,可以使用f 字符串实现相同的行为:
number = 1
print(f"{number:02d}")
解决方案 2:
您可以使用str.zfill
:
print(str(1).zfill(2))
print(str(10).zfill(2))
print(str(100).zfill(2))
印刷:
01
10
100
解决方案 3:
在 Python 2.6+ 和 3.0+ 中,您可以使用format()
字符串方法:
for i in (1, 10, 100):
print('{num:02d}'.format(num=i))
或使用内置函数(针对单个数字):
print(format(i, '02d'))
请参阅PEP-3101文档以了解新的格式化功能。
解决方案 4:
print('{:02}'.format(1))
print('{:02}'.format(10))
print('{:02}'.format(100))
印刷:
01
10
100
解决方案 5:
在Python >= 3.6中,你可以使用以下方式引入的新 f 字符串简洁地执行此操作:
f'{val:02}'
它打印名为 的变量val
,其fill
值为0
,且width
为2
。
对于您的具体示例,您可以在循环中很好地完成此操作:
a, b, c = 1, 10, 100
for val in [a, b, c]:
print(f'{val:02}')
打印结果为:
01
10
100
有关 f 字符串的更多信息,请查看介绍它们的PEP 498 。
解决方案 6:
或者这样:
print '{0:02d}'.format(1)
解决方案 7:
x = [1, 10, 100]
for i in x:
print '%02d' % i
结果:
01
10
100
在文档中阅读有关使用 % 进行字符串格式化的更多信息。
解决方案 8:
按照 Python 的方式去做:
str(number).rjust(string_width, fill_char)
这样,如果原始字符串的长度大于 string_width,则将不加改变地返回。例如:
a = [1, 10, 100]
for num in a:
print str(num).rjust(2, '0')
结果:
01
10
100
解决方案 9:
或者其他解决方案。
"{:0>2}".format(number)
解决方案 10:
它内置于 Python 中,具有字符串格式
f'{number:02d}'
解决方案 11:
您可以使用f 字符串来做到这一点。
import numpy as np
print(f'{np.random.choice([1, 124, 13566]):0>8}')
这将打印长度为 8 的常数,并用前导 填充其余部分0
。
00000001
00000124
00013566
解决方案 12:
我是这样做的:
str(1).zfill(len(str(total)))
基本上 zfill 会采用您想要添加的前导零的数量,因此很容易取最大的数字,将其转换为字符串并获取长度,如下所示:
Python 3.6.5(默认,2018 年 5 月 11 日,04:00:52)
Linux 上的 [GCC 8.1.0]
输入“帮助”、“版权”、“信用”或“许可”以获取更多信息。
>>> 总计 = 100
>>> 打印(str(1)。zfill(len(str(total))))
001
>>> 总计 = 1000
>>> 打印(str(1)。zfill(len(str(total))))
0001
>>> 总计 = 10000
>>> 打印(str(1)。zfill(len(str(total))))
00001
>>>
解决方案 13:
使用格式字符串 - http://docs.python.org/lib/typesseq-strings.html
例如:
python -c 'print "%(num)02d" % {"num":5}'
解决方案 14:
您还可以这样做:
'{:0>2}'.format(1)
这将返回一个字符串。
解决方案 15:
width = 5
num = 3
formatted = (width - len(str(num))) * "0" + str(num)
print formatted
解决方案 16:
使用:
'00'[len(str(i)):] + str(i)
或者使用math
模块:
import math
'00'[math.ceil(math.log(i, 10)):] + str(i)
解决方案 17:
所有这些都创建字符串“01”:
>python -m timeit "'{:02d}'.format(1)"
1000000 loops, best of 5: 357 nsec per loop
>python -m timeit "'{0:0{1}d}'.format(1,2)"
500000 loops, best of 5: 607 nsec per loop
>python -m timeit "f'{1:02d}'"
1000000 loops, best of 5: 281 nsec per loop
>python -m timeit "f'{1:0{2}d}'"
500000 loops, best of 5: 423 nsec per loop
>python -m timeit "str(1).zfill(2)"
1000000 loops, best of 5: 271 nsec per loop
>python
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
解决方案 18:
这将是 Python 的方式,虽然为了清楚起见我会包含参数 - “{0:0>2}”.format(number),如果有人想要 nLeadingZeros,他们应该注意他们也可以这样做:“{0:0>{1}}”.format(number, nLeadingZeros + 1)
解决方案 19:
如果处理一位或两位数的数字:
'0'+str(number)[-2:]
或者'0{0}'.format(number)[-2:]