[Python-es] Buscar varios elementos en una lista

Arnau Sanchez pyarnau en gmail.com
Mie Feb 17 13:10:41 CET 2010


On 17/02/10 10:37, marmolro wrote:

> Bueno, se trataba de ver las diferencias entre las "listas por
> compresión" y los generadores... el utilizar o no la función any creo
> que no impacta nada.

Precisamente a eso se refería Chema, que lo importante es si usas LC o 
generadores. Por resumir lo tratado en el hilo:

- True in [pred(x) for x in iterable]
   True in (pred(x) for x in iterable)

son equivalentes, respectivamente, a:

- any([pred(x) for x in iterable])
   any(pred(x) for x in iterable)

En la primera opción (lista por compresión) se recorre completamente el iterable 
y se crea una lista (de igual tamaño que el iterable), mientras que la segunda 
(generador) se detiene en el primer elemento que cumpla el predicado sin 
almacenar nada. Por tanto, es claramente más eficiente la segunda (más rápida, 
menos memoria).

Por otra parte, el equivalente a all() sería:

False not in (pred(x) for x in iterable)

-- 
http://www.arnau-sanchez.com



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