2009-04-23 25 views

risposta

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

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

print c 
+18

Tutto ciò che manca sono alcune parentesi graffe! ;) –

+5

. Hai scoperto il mio profondo oscuro segreto (C++). Sono umiliato dagli altri intervistati sublime pitone. – RedBlueThing

+2

Tornando a questa risposta molti anni dopo e dopo aver lavorato in Python per un po '. Questo è il mio preferito -> [int (x) per x in str (a)] che è la risposta di @ BjornTipling :) – RedBlueThing

64

Vuoi dire questo?

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

Si potrebbe fare questo:

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

Si noti che in Python 3.0 la mappa restituirà un generatore, non una lista. – Stephan202

5

Non utilizzare la parola lista come nome della variabile! È un nome di python costruito nel tipo di dati.

Inoltre, chiarire la domanda. Se siete alla ricerca di un modo per creare una lista di un membro, effettuare le seguenti operazioni:

a = 123 
my_list = [a] 

e "pythonizing" La risposta di Cannonade:

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

Mi piace quando ottengo pythonized. Mi sento carina adesso. : P – RedBlueThing

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

poi basta fare

magic(12345) 

o

magic(someInt) #or whatever 
+0

Per DIO è incredibile. – franklin

0

Basta usare:

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

che restituirebbe un elenco di caratteri, non * direttamente * interi –

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] 

Secondo i miei tempi, questa soluzione è notevolmente più veloce rispetto al metodo stringa (magic2), anche per i più piccoli esempi.

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

Timings:

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

Questa è la risposta più utile. – spider

+0

'map (int, str (n))' dalla risposta di @Wilbeibi è più veloce di entrambi (testato su Python3) –

+0

@FelipeBuccioni 'map' in python 3 creerà solo un generatore, non un' elenco'. È necessario 'list (map (int, str (n))'. 'Map (int, str (n))' praticamente non fa nulla da solo. – jamylak

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

Se viene chiamato come magia, perché non usare solo la magia:

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