[L[i] for i in xrange(len(L)) if i%2==0][:100]

Chema Cortés py en ch3m4.org
Mar Abr 22 10:19:11 CEST 2003


> y si primero creas una copia de los 200 primeros elementos de tu lista 
> de 1e6 elementos?, algo así
> 
> s=L[:200]
> [s[i] for i in range(len(s)) if i%2==0]

Aquí sabes de antemano que con 200 elementos tienes suficiente. Por eso
decía lo de la serie de fibonaci. Por cierto, que no habría suficiente
con 1e6 elementos para los 100 primeros números de la serie fibonaci.

> para lo de la secuencia a voluntad esto debiera funcionar:
> 
> deb fib(i):
>      resultado=[]
>      a, b = 0, 1
>      for j in range(i):
>           resultado.append(b)
>           a, b = b, a+b
>      return resultado
> #sea L la lista de datos
> extracto=[L[i] for i in fib(100)]

En este caso estás calculando 100 veces los 100 primeros números de
fibonaci. Es más recomendable la versión iterador:

# Esta línea sobra en python 2.3
from __future__ import generator

def fib(n):
    a,b=0,1
    i=0
    while i<n:
        yield b
        a,b=b,a+b
        i+=1

[L[fi] for fi in fib(100)]


> En otro orden de cosas, hace un tiempo, cuando estré en la lista, 
> incluí un mensage con el texto de un guión que utilizo frecuentemente 
> y que sigo intentando optimizar( ya lo ha hecho en gran medida), en el 
> se calculan los valores máximos y minimos de las diferentes variables 
> que componen una tabla de datos, puesta como lista de listas, el 
> código el versión LC es algo así:
> 
> #esto calcula los mínimos de [
> #                              [ a1, b1, c1, d1],
> #                              [ a2, b2, c2, d2],
> #                              .....
> #                              [ an, bn, cn,dn]
> #                            ]
> # excepto para ai
> 
> infimos=[min([materiais[j][i] for j in range(len(nateriais))]) for i 
> in range(1, len materiais[0]-1)]
> # anda que nom mola maço
> 
> #analogamente para supremos.

¿y no podía haber sido simplemente así?

infimos=[ min(l) for l in materiais]

incluso en una sóla pasada:

[ (min(l), max(l)) for l in materiais ]

> Por dierto, me gustó lo de la variable al vuelo, es una cosa que 
> cuando empecé a hacer cosillas quise aprender pero no logré, si me 
> acuerdo para que lo quería intentaré hacer buen uso.

Como curiosidad, la clave de los diccionarios globals() y locals()
también puede utilizarse números, tuplas e incluso nombres de ilegales
para variables (eg: '€' el símbolo del euro), aunque no le he encontrado
ninguna utilidad práctica.

--
"Make free software, not war"




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