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.
The most Pythonic way to convert a list of strings to a list of ints is to use the list comprehension [int(x) for x in strings] . It iterates over all elements in the list and converts each list element x to an integer value using the int(x) built-in function.
Step 1 − Divide the decimal number to be converted by the value of the new base. Step 2 − Get the remainder from Step 1 as the rightmost digit (least significant digit) of new base number. Step 3 − Divide the quotient of the previous divide by the new base.
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]
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
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
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.
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
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
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With