Convert a number to a list of integers

Posted on

Question :

Convert a number to a list of integers

How do I write the magic function below?

>>> num = 123
>>> lst = magic(num)
>>> print lst, type(lst)
[1, 2, 3], <type 'list'>

Answer #1:

a = 123456
b = str(a)
c = []

for digit in b:
    c.append (int(digit))

print c
Answered By: RedBlueThing

Answer #2:

You mean this?

num = 1234
lst = [int(i) for i in str(num)]
Answered By: Bjorn

Answer #3:

You could do this:

>>> num = 123
>>> lst = map(int, str(num))
>>> lst, type(lst)
([1, 2, 3], <type 'list'>)
Answered By: John Fouhy

Answer #4:

magic = lambda num: map(int, str(num))

then just do



magic(someInt) #or whatever
Answered By: Alex

Answer #5:

>>> from collections import deque
>>> def magic(num):
        digits = deque()
        while True:
            num,r = divmod(num,10)
            if num == 0:
        return list(digits)

>>> magic(123)
[1, 2, 3]

According to my timings, this solution is considerably faster than the string method (magic2), even for smaller examples.

>>> def magic2(num):
        return [int(i) for i in str(num)]



>>> timeit.timeit(setup='from __main__ import magic', stmt='magic(123)')
>>> timeit.timeit(setup='from __main__ import magic', stmt='magic(999999999)')


>>> timeit.timeit(setup='from __main__ import magic2', stmt='magic2(123)')
>>> timeit.timeit(setup='from __main__ import magic2', stmt='magic2(999999999)')
Answered By: jamylak

Answer #6:

Don’t use the word list as variable name! It is a name of python built in data type.

Also, please clarify your question. If you are looking for a way to create a one-member list, do the following:

a = 123
my_list = [a]

and “pythonizing” Cannonade’s answer:

a = 123
my_list = [int(d) for d in str(a)]
Answered By: Boris Gorelik

Answer #7:

num = map(int, list(str(num)))
Answered By: wilbeibi

Answer #8:

If it is named as magic, why not just use magic:

def magic(x):
    if x < 10:
        return [x]
        return magic(x//10) + [x%10]
Answered By: englealuze

Leave a Reply

Your email address will not be published.