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/