68

What is the quickest and cleanest way to convert an integer into a list?

For example, change 132 into [1,3,2] and 23 into [2,3]. I have a variable which is an int, and I want to be able to compare the individual digits so I thought making it into a list would be best, since I can just do int(number[0]), int(number[1]) to easily convert the list element back into int for digit operations.

martineau
  • 119,623
  • 25
  • 170
  • 301
Dergyll
  • 891
  • 1
  • 8
  • 13

12 Answers12

99

Convert the integer to string first, and then use map to apply int on it:

>>> num = 132
>>> map(int, str(num))    #note, This will return a map object in python 3.
[1, 3, 2]

or using a list comprehension:

>>> [int(x) for x in str(num)]
[1, 3, 2]
Eric Leschinski
  • 146,994
  • 96
  • 417
  • 335
Ashwini Chaudhary
  • 244,495
  • 58
  • 464
  • 504
  • 4
    I tried what you wrote but it didn't return the same as you did: >>>num =132 >>>map(int, str(num)) (I don't know how format the comment right.) – GinKin Mar 03 '14 at 15:56
  • 4
    @GinKin For Python 3 you need `list(map(int, str(num)) )`. – Ashwini Chaudhary Mar 03 '14 at 17:11
  • More on the answer can be found here: `https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions` and here `https://en.wikipedia.org/wiki/List_comprehension` – Wachaga Mwaura Jan 21 '19 at 07:34
19

There are already great methods already mentioned on this page, however it does seem a little obscure as to which to use. So I have added some mesurements so you can more easily decide for yourself:


A large number has been used (for overhead) 1111111111111122222222222222222333333333333333333333

Using map(int, str(num)):

import timeit

def method():
    num = 1111111111111122222222222222222333333333333333333333
    return map(int, str(num))

print(timeit.timeit("method()", setup="from __main__ import method", number=10000)

Output: 0.018631496999999997

Using list comprehension:

import timeit

def method():
    num = 1111111111111122222222222222222333333333333333333333
    return [int(x) for x in str(num)]

print(timeit.timeit("method()", setup="from __main__ import method", number=10000))

Output: 0.28403817900000006

Code taken from this answer

The results show that the first method involving inbuilt methods is much faster than list comprehension.

The "mathematical way":

import timeit

def method():
    q = 1111111111111122222222222222222333333333333333333333
    ret = []
    while q != 0:
        q, r = divmod(q, 10) # Divide by 10, see the remainder
        ret.insert(0, r) # The remainder is the first to the right digit
    return ret

print(timeit.timeit("method()", setup="from __main__ import method", number=10000))

Output: 0.38133582499999996

Code taken from this answer

The list(str(123)) method (does not provide the right output):

import timeit

def method():
    return list(str(1111111111111122222222222222222333333333333333333333))
    
print(timeit.timeit("method()", setup="from __main__ import method", number=10000))

Output: 0.028560138000000013

Code taken from this answer

The answer by Duberly González Molinari:

import timeit

def method():
    n = 1111111111111122222222222222222333333333333333333333
    l = []
    while n != 0:
        l = [n % 10] + l
        n = n // 10
    return l

print(timeit.timeit("method()", setup="from __main__ import method", number=10000))

Output: 0.37039988200000007

Code taken from this answer

Remarks:

In all cases the map(int, str(num)) is the fastest method (and is therefore probably the best method to use). List comprehension is the second fastest (but the method using map(int, str(num)) is probably the most desirable of the two.

Those that reinvent the wheel are interesting but are probably not so desirable in real use.

Community
  • 1
  • 1
Xantium
  • 11,201
  • 10
  • 62
  • 89
6

The shortest and best way is already answered, but the first thing I thought of was the mathematical way, so here it is:

def intlist(n):
    q = n
    ret = []
    while q != 0:
        q, r = divmod(q, 10) # Divide by 10, see the remainder
        ret.insert(0, r) # The remainder is the first to the right digit
    return ret

print intlist(3)
print '-'
print intlist(10)
print '--'
print intlist(137)

It's just another interesting approach, you definitely don't have to use such a thing in practical use cases.

jadkik94
  • 7,000
  • 2
  • 30
  • 39
3
n = int(raw_input("n= "))

def int_to_list(n):
    l = []
    while n != 0:
        l = [n % 10] + l
        n = n // 10
    return l

print int_to_list(n)
Martin Evans
  • 45,791
  • 17
  • 81
  • 97
2

Use list on a number converted to string:

In [1]: [int(x) for x in list(str(123))]
Out[2]: [1, 2, 3]
2

If you have a string like this: '123456' and you want a list of integers like this: [1,2,3,4,5,6], use this:

>>>s = '123456'    
>>>list1 = [int(i) for i in list(s)]
>>>print(list1)

[1,2,3,4,5,6]

or if you want a list of strings like this: ['1','2','3','4','5','6'], use this:

>>>s = '123456'    
>>>list1 = list(s)
>>>print(list1)

['1','2','3','4','5','6']
2
>>>list(map(int, str(number)))  #number is a given integer

It returns a list of all digits of number.

Sandeep Chauhan
  • 119
  • 1
  • 1
  • 10
1

you can use:

First convert the value in a string to iterate it, Them each value can be convert to a Integer value = 12345

l = [ int(item) for item in str(value) ]

juancarlos
  • 593
  • 3
  • 9
1

By looping it can be done the following way :)

num1= int(input('Enter the number'))
sum1 = num1 #making a alt int to store the value of the orginal so it wont be affected
y = [] #making a list 
while True:
    if(sum1==0):#checking if the number is not zero so it can break if it is
        break
    d = sum1%10 #last number of your integer is saved in d
    sum1 = int(sum1/10) #integer is now with out the last number ie.4320/10 become 432
    y.append(d) # appending the last number in the first place

y.reverse()#as last is in first , reversing the number to orginal form
print(y)

Answer becomes

Enter the number2342
[2, 3, 4, 2]
0
num = 123
print(num)
num = list(str(num))
num = [int(i) for i in num]
print(num)
Tonechas
  • 13,398
  • 16
  • 46
  • 80
Ahmed
  • 11
  • 2
    Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Oct 13 '21 at 19:47
  • As it’s currently written, your answer is unclear. Please [edit] to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Oct 13 '21 at 19:47
-1
num = list(str(100))
index = len(num)
while index > 0:
    index -= 1
    num[index] = int(num[index])
print(num)

It prints [1, 0, 0] object.

Grant Miller
  • 27,532
  • 16
  • 147
  • 165
-1

Takes an integer as input and converts it into list of digits.

code:

num = int(input())
print(list(str(num)))

output using 156789:

>>> ['1', '5', '6', '7', '8', '9']
Josef
  • 2,869
  • 2
  • 22
  • 23