Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting integer to digit list

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.

like image 238
Dergyll Avatar asked Dec 16 '12 22:12

Dergyll


People also ask

How do I make an int into a list?

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.

How do you convert numbers into digits?

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.


2 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] 
like image 80
Ashwini Chaudhary Avatar answered Oct 04 '22 23:10

Ashwini Chaudhary


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.

like image 43
Xantium Avatar answered Oct 04 '22 23:10

Xantium