Me gusta la comprensión de listas

Chema Cortés py en ch3m4.org
Lun Abr 21 19:33:58 CEST 2003


> He estado leyendo el correo resumen 252, del 18 de abril, y he de 
> decir que en mi opinión la LC es muy cómoda. Aprendí el otro día y ya 
> la utilizo todo lo que puedo, en cambio por lo general no se me ocurre 
> utilizar las funciones de programación funcional.

La compresión de listas resulta cómoda porque se aplica en casos muy
sencillos. Personalmente, me parece complicada su sintaxis en cuanto
anidas algunos bucles y, por otro lado, le echo en falta un operador de
corte (estilo break en bucles ó StopIteration en iteradores).

Por ejemplo, estoy dándole vueltas a un problema. Tengo una lista de
1.000.000 de elementos y quiero sacar los primeros 100 elementos que
estén en posiciones pares. La comprensión de listas me obliga a revisar
todo el millón de elementos, algo que es una barbaridad:

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

La cosa se complica más si en lugar de posiciones pares quisiera los 100
primeros elementos de posiciones dadas por una serie (pe: la serie de
fibonaci).

Utilizando el enumerate() de python 2.3 y un hipotético operador de
corte, sí que se podría hacer algo tal que así:

[ L[fi] for (i,fi) in enumerate(fib()) while i<100 ]

De momento ésto es imposible. La única aproximación que se me ocurre
sería reescribir el iterador fib() para que cortara en el elemento 100.

--
"Make free software, not war"




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