El día 15 de octubre de 2010 23:46, tny <a.por...@gmail.com> escribió:
> Cada vez que se hace un split se recorre toda la cadena de texto entera,
> pero se puede hacer recorriendo la cadena sólo una vez.
>
> a = 'xxxxx*xxxxx'
>
> def f(a):
>        i=0
>        while a[i] not in '+-*/':
>                i+=1
>        return a[:i],a[i],a[:i]
>
> No sé cual de todas sería más eficiente, porque aunque con los splits
> multiples se recorra la cadena varias veces, estará implementado en c...
>

Poco le importará las optimizaciones de código al que piense luego
portarlo a java o c#.

> Sería divertido hacer un concurso de algoritmos, tal vez a la vélocidad
> y a la elegancia.
> Se podría aprender mucho, he visto en esta lista códigos muy
> interesantes.
>

Buscando cadenas de un solo caracter no se me ocurre mucho que hacer.
Con cadenas más largas el algoritmo boyer-moore ayuda un montón.
http://en.wikipedia.org/wiki/String_searching_algorithm

Si las cadenas estan validadas y siempre tienen uno de los operadores,
y solo uno, cuando se encuentre el primero no hace falta buscar más.
Con split sería cadena.split("*", 1), por ejemplo. Pero esto sólo se
debería hacer si la cadena está validada. Si las cadenas vienen de una
entrada de usuario, es mejor recorrerla entera y garantizar que está
bien formada. Y si no lo está, detectarlo pronto y explicar al usuario
cuál es el fallo.

Un saludo:

Javi
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a