Coste de len() en strings
Alvaro Leiva
aleivag en udd.cl
Vie Feb 24 02:48:57 CET 2006
Aparentemente el coste no depende de el tamaño de un string.
En todo caso puedes verlo tu enpiricamente con este programita
from timeit import Timer
x=["a"*10,"a"*100,"a"*1000,"a"*10000]
for i in x*5:
print Timer("len(x)","x='%s'" % i).timeit()
Te daras cuenta que casi siempre te imprime el mismo numero "0.55" en mi
computador....
Esto deja en claro que el coste no depende de el largo del string. No asi
cuando uno ejecuta esto con listas
x=[["a"]*10,["a"]*100,["a"]*1000,["a"]*10000]
for i in x*5:
print Timer("len(x)","x=%s" % i).timeit()
Que arroja siempre valores pequeños de tiempo para ["a"]*10 y los tiempos
siempre son acendentes....
Este metodo del from timeit import Timer siempre lo ocupo cuando tengo una
duda sobre el coste de una funcion... Muy util cuando uno programa
algoritmos de optimisacion lineal como el simplex... Algoritmos famosos por
su tendencia a volverse lentos
atte:
Alvaro
El 23/2/06 15:47, "heimy" <ricardo.cardenes en gmail.com> escribió:
> El 23/02/06, Cesar Ortiz<cesar.ortiz en gmail.com> escribió:
>> Una pregunta simple: ¿El coste de la funcion len() en un string es
>> independiente de la longitud del string? Ando mirando la web, pero de
>> momento no he visto nada.
>> En unas pruebas que he hecho parecen indicar que si.
>
> No tengo ninguna prueba fehaciente (ie: el código) a mano, pero al
> contrario que en C, donde strlen es O(n) porque tiene que recorrer la
> cadena entera hasta el '\0' final, en Python debería ser O(1) porque
> en principio el manejo de cadenas no usa las str* de C, así que
> probablemente almacenará en alguna variable el tamaño del contenido.
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
Más información sobre la lista de distribución Python-es