There's actually a super tricky way to do this using the itertools library and a generator function.
from itertools import product, imap
def stringdigit(num_digits=10, start = None):
"""A generator function which returns string versions of a large iterated number with
leading zeros. start allows you to define a place to begin the iteration"""
treatfun = lambda x: ''.join(x)
for n in imap(treatfun, product('0123456789', repeat = num_digits)):
if start == None or n > start:
yield n
This creates an iterator which will return the "zero-padded string form" that you need. It works using the product function which iteratively returns repeated combinations from an iterable in "sorted order". The num_digits argument specifies how many total digits you would like returned. start
specifies a place to begin the iteration from (say if you wanted to start from 1111111).
product
comes with the python 2.6 release. If your using something before that for some reason then use this as the product definition. Taken from the docs here.
def product(*args, **kwds):
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
pools = map(tuple, args) * kwds.get('repeat', 1)
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
for prod in result:
yield tuple(prod)
You can use this function in in a for-loop as an interator:
for num in stringdigit(num_digits = 7):
#do stuff with num
Hope that helps.
-Will