Graeme Caldwell wrote:
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

Reply via email to