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