Convertir una cadena a formato lista

Chema Cortes py en ls-l.org
Mar Jun 14 15:00:30 CEST 2005


Francesc Altet escribió:

> Pues si. Con una mezcla de eso y lo de Ernesto, he conseguido justo lo
> que queria:
> 
> In [9]:[int(i) for i in '(23, 2)'[1:-1].split(',') if i.strip().isdigit()]
> Out[9]:[23, 2]
> 
> In [10]:[int(i) for i in '(23,)'[1:-1].split(',') if i.strip().isdigit()]
> Out[10]:[23]
> 
> Además de más seguro, esto es incluso más rápido (4 veces más) que eval:
> 
> In [63]:min(timeit.Timer("convierte('(23, 2)')", "def convierte(lst): return 
> [int(i) for i in lst[1:-1].split(',') if i.strip().isdigit()] 
> ").repeat(3,1000))
> Out[63]:0.0085310935974121094
> 
> In [64]:min(timeit.Timer("eval('(23, 2)')").repeat(3,1000))
> Out[64]:0.033796072006225586

En fin, yo, como siempre, proponiendo alternativas curiosas :-P

import re

pat=re.compile('\d+')
[int(i) for i in pat.findall('(23, 2)')]


En rapidez me salen tiempos muy similares, aunque no es para fiarse mucho.




Más información sobre la lista de distribución Python-es