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.
12 Answers
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] 3There 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.
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.
2n = 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) 1>>>list(map(int, str(number))) #number is a given integer It returns a list of all digits of number.
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'] Use list on a number converted to string:
In [1]: [int(x) for x in list(str(123))] Out[2]: [1, 2, 3] 1you 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) ]
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] num = 123 print(num) num = list(str(num)) num = [int(i) for i in num] print(num) 2num = list(str(100)) index = len(num) while index > 0: index -= 1 num[index] = int(num[index]) print(num) It prints [1, 0, 0] object.
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']