font python list python-3.x filter

font - Filtros en Python3



subplot title python (2)

Es un iterator devuelto por la función de filter .

Si quieres una lista, solo hazlo

list(filter(f, range(2, 25)))

No obstante, puede iterar sobre este objeto con un ciclo for .

for e in filter(f, range(2, 25)): do_stuff(e)

Esta pregunta ya tiene una respuesta aquí:

Estoy aprendiendo el concepto de filtros en Python. Estoy ejecutando un código simple como este.

>>> def f(x): return x % 2 != 0 and x % 3 != 0 >>> filter(f, range(2, 25))

Pero en vez de obtener una lista, recibo un mensaje como este.

<filter object at 0x00FDC550>

¿Qué significa esto? ¿Significa que mi objeto filtrado, es decir, lista para salir, se almacena en esa ubicación de memoria? ¿Cómo obtengo la lista que necesito?


Parece que estás usando python 3.x. En python3, filter , map , zip , etc devuelve un objeto que es iterable, pero no una lista. En otras palabras,

filter(func,data) #python 2.x

es equivalente a:

list(filter(func,data)) #python 3.x

Creo que ha cambiado porque (a menudo) quiere hacer el filtrado en sentido perezoso: no necesita consumir toda la memoria para crear una lista por adelantado, siempre que el iterador devuelva lo mismo una lista lo haría durante la iteración.

Si está familiarizado con las comprensiones de lista y las expresiones de generador, el filtro anterior ahora es (casi) equivalente al siguiente en python3.x:

( x for x in data if func(x) )

Opuesto a:

[ x for x in data if func(x) ]

en python 2.x