LynxLee
LynxLee

Reputation: 341

Python Four Digits Counter

How do we use python to generate a four digit counter?

range(0,9999)

will have 1 digits, 2 digits and 3 digits. We only want 4 digits.

i.e. 0000 to 9999

Of course, the simplest Pythonic way.

Upvotes: 11

Views: 31019

Answers (5)

Paolo
Paolo

Reputation: 21056

if you'd like to choose string formatting, as many suggested, and you are using a Python not less than 2.6, take care to use string formatting in its newest incarnation. Instead of:

["%04d" % idx for idx in xrange(10000)]

it is suggested to opt for:

["{0:0>4}".format(i) for i in xrange(1000)]

This is because this latter way is used in Python 3 as default idiom to format strings and I guess it's a good idea to enhance your code portability to future Python versions.

As someone said in comments, in Python 2.7+ there is no need to specify the positional argument, so this is also be valid:

["{:0>4}".format(i) for i in xrange(1000)]

Upvotes: 3

nkint
nkint

Reputation: 11733

Maybe str.zfill could also help you:

>>> "1".zfill(4)
'0001'

Upvotes: 20

lafras
lafras

Reputation: 9176

And to really go overboard,

In [8]: class Int(int):
   ...:     def __repr__(self):
   ...:         return self.__str__().zfill(4)
   ...:     
   ...:     

In [9]: a = Int(5)

In [10]: a
Out[10]: 0005

Upvotes: 0

Rafe Kettler
Rafe Kettler

Reputation: 76955

Format the string to be padded with 0's. To get a list of 0 to 9999 padded with zeroes:

["%04d" % x for x in range(10000)]

Same thing works for 5, 6, 7, 8 zeroes, etc. Note that this will give you a list of strings. There's no way to have an integer variable padded with zeroes, so the string is as close as you can get.

The same format operation works for individual ints as well.

Upvotes: 22

Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

Reputation: 798606

You don't. You format to 4 digits when outputting or processing.

print '%04d' % val

Upvotes: 5

Related Questions