How do I display a leading zero for all numbers with less than two digits?
1 → 01
10 → 10
100 → 100
Mateen Ulhaq
22.2k16 gold badges86 silver badges127 bronze badges
asked Sep 25, 2008 at 18:06
ashchristopherashchristopher
24k17 gold badges45 silver badges49 bronze badges
0
In Python 2 [and Python 3] you can do:
number = 1
print["%02d" % [number,]]
Basically
% is like printf
or sprintf
[see docs].
For Python 3.+, the same behavior can also be achieved with format
:
number = 1
print["{:02d}".format[number]]
For Python 3.6+ the same behavior can be achieved with f-strings:
number = 1
print[f"{number:02d}"]
Flimm
121k39 gold badges231 silver badges245 bronze badges
answered Sep 25, 2008 at 18:08
9
You can use str.zfill
:
print[str[1].zfill[2]]
print[str[10].zfill[2]]
print[str[100].zfill[2]]
prints:
01
10
100
Neuron
4,5574 gold badges32 silver badges53 bronze badges
answered Jul 30, 2010 at 11:58
DatageekDatageek
24.9k6 gold badges62 silver badges67 bronze badges
5
In Python 2.6+ and 3.0+, you would use the format[]
string method:
for i in [1, 10, 100]:
print['{num:02d}'.format[num=i]]
or using the built-in [for a single number]:
print[format[i, '02d']]
See the PEP-3101 documentation for the new formatting functions.
phoenix
6,3684 gold badges36 silver badges44 bronze badges
answered Sep 25, 2008 at 18:43
BerBer
38.1k15 gold badges68 silver badges82 bronze badges
2
print['{:02}'.format[1]]
print['{:02}'.format[10]]
print['{:02}'.format[100]]
prints:
01
10
100
Neuron
4,5574 gold badges32 silver badges53 bronze badges
answered Nov 13, 2013 at 19:30
KresimirKresimir
2,8101 gold badge18 silver badges13 bronze badges
2
In Python >= 3.6, you can do this succinctly with the new f-strings that were introduced by using:
f'{val:02}'
which prints the variable with name val
with a fill
value of 0
and a
width
of 2
.
For your specific example you can do this nicely in a loop:
a, b, c = 1, 10, 100
for val in [a, b, c]:
print[f'{val:02}']
which prints:
01
10
100
For more information on f-strings, take a look at PEP 498 where they were introduced.
Neuron
4,5574 gold badges32 silver badges53 bronze badges
answered Nov 28, 2017 at 14:52
Or this:
print '{0:02d}'.format[1]
answered Nov 10, 2010 at 10:03
ajdajd
9376 silver badges2 bronze badges
The Pythonic way to do this:
str[number].rjust[string_width, fill_char]
This way, the original string is returned unchanged if its length is greater than string_width. Example:
a = [1, 10, 100]
for num in a:
print str[num].rjust[2, '0']
Results:
01
10
100
Neuron
4,5574 gold badges32 silver badges53 bronze badges
answered Apr 27, 2012 at 22:02
ZuLuZuLu
9038 silver badges17 bronze badges
0
Or another solution.
"{:0>2}".format[number]
Kenly
20.8k6 gold badges41 silver badges57 bronze badges
answered Nov 22, 2015 at 21:01
WinterChillyWinterChilly
1,4993 gold badges19 silver badges29 bronze badges
1
You can do this with f strings.
import numpy as np
print[f'{np.random.choice[[1, 124, 13566]]:0>8}']
This will print constant length of 8, and pad the rest with leading 0
.
00000001
00000124
00013566
answered Mar 11, 2020 at 18:50
Nicolas GervaisNicolas Gervais
30.2k11 gold badges101 silver badges126 bronze badges
This is how I do it:
str[1].zfill[len[str[total]]]
Basically zfill takes the number of leading zeros you want to add, so it's easy to take the biggest number, turn it into a string and get the length, like this:
Python 3.6.5 [default, May 11 2018, 04:00:52] [GCC 8.1.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> total = 100 >>> print[str[1].zfill[len[str[total]]]] 001 >>> total = 1000 >>> print[str[1].zfill[len[str[total]]]] 0001 >>> total = 10000 >>> print[str[1].zfill[len[str[total]]]] 00001 >>>
answered Jun 21, 2018 at 0:43
RobertoRoberto
4465 silver badges10 bronze badges
1
width = 5
num = 3
formatted = [width - len[str[num]]] * "0" + str[num]
print formatted
answered Nov 15, 2013 at 16:33
nvdnvd
2,70826 silver badges15 bronze badges
Use:
'00'[len[str[i]]:] + str[i]
Or with the math
module:
import math
'00'[math.ceil[math.log[i, 10]]:] + str[i]
answered Apr 20, 2018 at 13:21
All of these create the string "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
answered Mar 9, 2021 at 18:51
handlehandle
6,1333 gold badges48 silver badges76 bronze badges
This would be the Python way, although I would include the parameter for clarity - "{0:0>2}".format[number], if someone will wants nLeadingZeros they should note they can also do:"{0:0>{1}}".format[number, nLeadingZeros + 1]
answered Oct 2, 2021 at 11:23
You could also do:
'{:0>2}'.format[1]
which will return a string.
answered May 16 at 19:04
If dealing with numbers that are either one or two digits:
'0'+str[number][-2:]
or '0{0}'.format[number][-2:]
answered Feb 19, 2016 at 4:20