Convertir una lista de enteros a dígitos

¿Cuál es la forma más rápida y limpia de convertir un integer en una list ?

Por ejemplo, cambie 132 en [1,3,2] y 23 en [2,3] . Tengo una variable que es un int , y quiero poder comparar los dígitos individuales, así que pensé que sería mejor hacerlo en una lista, ya que solo puedo hacer int(number[0]) , int(number[1]) para convertir fácilmente el elemento de lista nuevamente en int para operaciones de dígitos.

Convierta primero el número entero en una cadena y luego use map para aplicar int en él:

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

o utilizando una lista de comprensión:

 >>> [int(x) for x in str(num)] [1, 3, 2] 

La forma más corta y mejor ya está contestada, pero lo primero que pensé fue en la forma matemática, así que aquí está:

 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) 

Es solo otro enfoque interesante, definitivamente no tiene que usar tal cosa en casos prácticos de uso.

Ya hay grandes métodos ya mencionados en esta página, sin embargo, parece un poco oscuro en cuanto a cuál usar. Así que he agregado algunas mediciones para que pueda decidir más fácilmente por sí mismo:


Se ha utilizado un gran número (para gastos generales) 1111111111111122222222222222222333333333333333333333

Usando 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) 

Salida: 0.018631496999999997

Usando la lista de comprensión:

tiempo de importación

 def method(): num = 1111111111111122222222222222222333333333333333333333 return [int(x) for x in str(num)] print(timeit.timeit("method()", setup="from __main__ import method", number=10000)) 

Salida: 0.28403817900000006

Código tomado de esta respuesta

Los resultados muestran que el primer método que involucra métodos incorporados es mucho más rápido que la comprensión de lista.

La “forma matemática”:

 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)) 

Salida: 0.38133582499999996

Código tomado de esta respuesta

El método list(str(123)) (no proporciona el resultado correcto):

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

Salida: 0.028560138000000013

Código tomado de esta respuesta

La respuesta de 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)) 

Salida: 0.37039988200000007

Código tomado de esta respuesta

Observaciones:

En todos los casos, el map(int, str(num)) es el método más rápido (y, por lo tanto, es probablemente el mejor método para usar). La comprensión de la lista es la segunda más rápida (pero el método que usa map(int, str(num)) es probablemente el más deseable de los dos.

Los que reinventan la rueda son interesantes, pero probablemente no sean tan deseables en el uso real.

Use la list en un número convertido a cadena:

 In [1]: [int(x) for x in list(str(123))] Out[2]: [1, 2, 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) 

puedes usar:

Primero convierta el valor en una cadena para iterarlo. Cada valor puede convertirse en un value = 12345 entero value = 12345

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

Si tienes una cadena como esta: ‘123456’ y quieres una lista de enteros como este: [1,2,3,4,5,6], usa esto:

 >>>s = '123456' >>>list1 = [int(i) for i in list(s)] >>>print(list1) [1,2,3,4,5,6] 

o si quieres una lista de cadenas como esta: [‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’], usa esto:

 >>>s = '123456' >>>list1 = list(s) >>>print(list1) ['1','2','3','4','5','6'] 
 num = list(str(100)) index = len(num) while index > 0: index -= 1 num[index] = int(num[index]) print(num) 

Imprime [1, 0, 0] objeto.