El día 26 de diciembre de 2012 18:40, kausdiv <kaus...@gmail.com> escribió:
> Para ilustrarlo mejor compara el código que ha escrito Chema con el mio del > principio: (aunque ambos usen formas distintas de conseguir los primos) No son comparables ya que se tratan de diferentes algoritmos. Tan sólo pretendía ilustrar que a veces es el lenguaje es quién determina qué método va mejor. > -----Codigo de Chema------ > > > def primes(n): > > criba = {1,2}|set(range(3,n+1,2)) > seq = (set(range(i+i,n+1,i)) for i in xrange(3,n+1,2) if i in criba) > for x in seq: > criba -= x > > return criba > -----------El mio--------------- > > def fprimos(n,x): > l=[] > for i in range(n,x): > isprime=1 > for k in range(2,i): > if i % k ==0 and i<>k: > isprime=0 > break > if isprime==1: > l.append(i) > return l > --------------------------------------- Pongo la versión que sería "comparable" con ésta (menos optimizada que la que usaba sets): def fprimos(n,x): def isprime(n): return all(n%k!=0 for k in range(2,n)) return [x for x in range(n,x) if isprime(x)] en una sóla línea: def fprimos(n,x): return [x for x in range(n,x) if all(n%k!=0 for k in range(2,n))] Algunas recomendaciones: 1) evitar almacenar estados intermedios (fuera contadores y variables intermedias) 2) huir del list.append() (usar las "compresiones" en su lugar) 3) la mejor optimización es saber usar los recursos del lenguaje (sum, max/min, all/any, sorted, zip, reduce, itertools, collections, ...) 4) evitar convertir los interadores a listas hasta el último momento (usar 'itertools') -- Hyperreals *R: http://ch3m4.org/blog Quarks, bits y otras criaturas infinitesimales _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/