What this does is takes as a paramter a decimal integer and converts it to a sequence in which each member is numeral from each position in the integer.
For this specific problem, the builtin 'str' is your best bet:
digit_list = map(int, str(val))
(If you only want to display the digits, you can use list(str(val)) to leave them as strings rather than converting back to an int)
However, that doesn't really fit with the general 'iterate' question you were asking. For that, something like a generator function is likely to help:
def digits(val): if val: while val: val, digit = divmod(val, 10) yield digit else: yield 0
digit_list = list(reversed(list(digits(val))))
Basically, I think the 'yield' keyword and generator functions are likely what you are looking for when it comes to easily building iterators.
However, continuing on with the attempt to write Haskell in Python, making the generator function 'dumber' by eliminating its knowledge of the termination condition gets us closer to the original:
from itertools import takeWhile
def next_digit(val): while 1: val, digit = divmod(val, 10) yield digit
digit_list = list(reversed(list( takewhile(lambda digit: digit, next_pair(val)))))
For cases where you don't need to do an assignment each time through the loop (e.g. by dividing by progressively larger multiples of 10 instead of using repeated division), you can ditch the function and use a generator expression instead:
from itertools import takewhile, count digit_list = reversed( list( takewhile( lambda digit: digit, (((val // (10 ** i)) % 10) for i in count()) ) ) )
Usually you're going to be better served by making the generator function smarter if you're going to be writing one anyway, though.
Cheers, Nick.
-- Nick Coghlan | [EMAIL PROTECTED] | Brisbane, Australia --------------------------------------------------------------- http://boredomandlaziness.skystorm.net -- http://mail.python.org/mailman/listinfo/python-list