2009-04-23 7 views

Respuesta

12
a = 123456 
b = str(a) 
c = [] 

for digit in b: 
    c.append (int(digit)) 

print c 
+18

¡Lo único que falta son algunas llaves! ;) –

+5

. Has descubierto mi secreto oscuro profundo (C++). Me siento honrado por los otros encuestados sublime python-ness. – RedBlueThing

+2

Volviendo a esta respuesta muchos años después y después de trabajar en Python por un tiempo. Este es mi favorito -> [int (x) para x en str (a)] que pasa a ser la respuesta de @BjornTipling :) – RedBlueThing

64

¿Se refiere a esto?

num = 1234 
lst = [int(i) for i in str(num)] 
13

Usted puede hacer esto:

>>> num = 123 
>>> lst = map(int, str(num)) 
>>> lst, type(lst) 
([1, 2, 3], <type 'list'>) 
+5

Tenga en cuenta que en Python 3.0 el mapa devolverá un generador, no una lista. – Stephan202

5

No utilizar la palabra lista como nombre de la variable! Es un nombre de python incorporado en el tipo de datos.

Además, aclare su pregunta. Si usted está buscando una manera de crear una lista de un solo miembro, haga lo siguiente:

a = 123 
my_list = [a] 

y "pythonizing" La respuesta de Cañoneo:

a = 123 
my_list = [int(d) for d in str(a)] 
+0

Me encanta cuando me picotean. Me siento bonita ahora. : P – RedBlueThing

7
magic = lambda num: map(int, str(num)) 

a continuación, sólo hacer

magic(12345) 

o

magic(someInt) #or whatever 
+0

Por DIOS que es asombroso. – franklin

0

sólo tiene que utilizar:

a= str (num) 
lst = list(a) 
+0

que devolvería una lista de caracteres, no * directamente * enteros –

6
>>> from collections import deque 
>>> def magic(num): 
     digits = deque() 
     while True: 
      num,r = divmod(num,10) 
      digits.appendleft(r) 
      if num == 0: 
       break 
     return list(digits) 

>>> magic(123) 
[1, 2, 3] 

Según mis tiempos, esta solución es considerablemente más rápido que el método de cadena (magic2), incluso para los más pequeños ejemplos.

>>> def magic2(num): 
     return [int(i) for i in str(num)] 

Tiempos:

magic

>>> timeit.timeit(setup='from __main__ import magic', stmt='magic(123)') 
1.3874572762508706 
>>> timeit.timeit(setup='from __main__ import magic', stmt='magic(999999999)') 
3.2624468999981673 

magic2

>>> timeit.timeit(setup='from __main__ import magic2', stmt='magic2(123)') 
3.693756106896217  
>>> timeit.timeit(setup='from __main__ import magic2', stmt='magic2(999999999)') 
10.485281719412114 
+0

Esta es la respuesta más útil. – spider

+0

'map (int, str (n))' de la respuesta de @Wilbeibi es más rápido que ambos (probado en Python3) –

+0

@FelipeBuccioni 'map' en python 3 solo creará un generador, no una' lista'. Necesitas 'list (map (int, str (n))'. 'Map (int, str (n))' no hace prácticamente nada por sí mismo. – jamylak

2
num = map(int, list(str(num))) 
1

Si se nombra como magia, ¿por qué no usar magia ?:

def magic(x): 
    if x < 10: 
     return [x] 
    else: 
     return magic(x//10) + [x%10] 
Cuestiones relacionadas