Estoy tratando de familiarizarme con el módulo itertools
y he encontrado una función llamada ifilter
.itertools.ifilter vs. filtro vs. lista de comprensiones
Según lo que entiendo, se filtra e iterable en función de la función dada y devuelve un iterador sobre una lista que contiene los elementos del iterable en el que la función evalúa a True
.
Pregunta 1: ¿mi interpretación es correcta hasta el momento?
Pregunta 2: aparte del hecho de que este devoluciones y iterador, en qué se diferencia de la incorporada en el filter
función?
Pregunta 3 ¿Qué es más rápido?
Por lo que puedo decir, no lo es. ¿Me estoy perdiendo de algo? (Me encontré con la siguiente prueba)
>>> itertools.ifilter(lambda x: x%2, range(5))
<itertools.ifilter object at 0x7fb1a101b210>
>>> for i in itertools.ifilter(lambda x: x%2, range(5)): print i
...
1
3
>>> filter(lambda x: x%2, range(5))
[1, 3]
>>> function = lambda x: x%2
>>> [item for item in range(5) if function(item)]
[1,3]
Lo salida de qué esperabas? 'range (5)' te dará '[0,1,2,3,4]'. – istruble
tenga en cuenta que la mayoría de los usos de filtro pueden ser reemplazados por un guardia en una expresión generador/lista: 'list (x para x en rango (5) si x% 2)' –