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