Convertir una cadena a formato lista

Francesc Altet faltet en carabos.com
Mar Jun 14 19:34:18 CEST 2005


A Tuesday 14 June 2005 15:00, Chema Cortes va escriure:
> En fin, yo, como siempre, proponiendo alternativas curiosas :-P
>
> import re
>
> pat=re.compile('\d+')
> [int(i) for i in pat.findall('(23, 2)')]

Pues si, cojonudo oye :) 

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

A mi tambien:

In [28]:min(timeit.Timer("[int(i) for i in pat.findall('(23, 2)')]", "import 
re;pat=re.compile('\d+')").repeat(3,1000))
Out[28]:0.0096049308776855469

In [29]:min(timeit.Timer("[int(i) for i in '(23, 2)'[1:-1].split(',') if 
i.strip().isdigit()]").repeat(3,1000))
Out[29]:0.0072658061981201172

Ya como curisiodad, para longitudes de tuplas grandes, las expresiones
regulares son tan rápidas como lo que más:

In [39]:min(timeit.Timer("[int(i) for i in str(tuple(range(100)))
[1:-1].split(',') if i.strip().isdigit()]").repeat(3,1000))
Out[39]:0.33156013488769531

In [40]:min(timeit.Timer("[int(i) for i in 
pat.findall(str(tuple(range(100))))]", "import 
re;pat=re.compile('\d+')").repeat(3,1000))
Out[40]:0.28829312324523926

In [41]:min(timeit.Timer("eval(str(tuple(range(100))))" ).repeat(3,1000))
Out[41]:0.56469011306762695

-- 
>0,0<   Francesc Altet     http://www.carabos.com/
V   V   Cárabos Coop. V.   Enjoy Data
 "-"




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