38

How do I write the magic function below?

>>> num = 123
>>> lst = magic(num)
>>>
>>> print lst, type(lst)
[1, 2, 3], <type 'list'>
Paolo Bergantino
  • 480,997
  • 81
  • 517
  • 436
user94774
  • 423
  • 1
  • 4
  • 4

11 Answers11

82

You mean this?

num = 1234
lst = [int(i) for i in str(num)]
Bjorn
  • 69,215
  • 39
  • 136
  • 164
24
a = 123456
b = str(a)
c = []

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

print c
RedBlueThing
  • 42,006
  • 17
  • 96
  • 122
16

You could do this:

>>> num = 123
>>> lst = map(int, str(num))
>>> lst, type(lst)
([1, 2, 3], <type 'list'>)
John Fouhy
  • 41,203
  • 19
  • 62
  • 77
11
magic = lambda num: map(int, str(num))

then just do

magic(12345) 

or

magic(someInt) #or whatever
jamylak
  • 128,818
  • 30
  • 231
  • 230
Alex
  • 4,316
  • 2
  • 24
  • 28
10
>>> from collections import deque
>>> def magic(num):
        digits = deque()
        while True:
            num,r = divmod(num,10)
            digits.appendleft(r)
            if num == 0:
                break
        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)]

Timings:

magic

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

magic2

>>> timeit.timeit(setup='from __main__ import magic2', stmt='magic2(123)')
3.693756106896217    
>>> timeit.timeit(setup='from __main__ import magic2', stmt='magic2(999999999)')
10.485281719412114
Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
jamylak
  • 128,818
  • 30
  • 231
  • 230
  • `map(int, str(n))` from the answer of @Wilbeibi is faster than both (tested on Python3) – Felipe Buccioni May 12 '17 at 04:11
  • @FelipeBuccioni `map` in python 3 will just create a generator, not a `list`. You need `list(map(int, str(n))`. `map(int, str(n))` does pretty much nothing by itself. – jamylak May 25 '17 at 08:07
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)]
Boris Gorelik
  • 29,945
  • 39
  • 128
  • 170
3
num = map(int, list(str(num)))
wilbeibi
  • 3,403
  • 4
  • 25
  • 44
3

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

def magic(x):
    if x < 10:
        return [x]
    else:
        return magic(x//10) + [x%10]
englealuze
  • 1,445
  • 12
  • 19
1

for python 3.x:

num = 1234
lst = list(map(int, str(num)))
Marko Tankosic
  • 164
  • 2
  • 12
0

You can try this:

def convert_to_list(number):
    return list(map(lambda x: int(x), str(number)))

convert_to_list(1245)
Anthony
  • 931
  • 1
  • 13
  • 30
-1

Just use :

a= str (num)
lst = list(a)
jamylak
  • 128,818
  • 30
  • 231
  • 230
MrDHat
  • 7
  • 1
  • 2