Filtros en Python3 [duplicar]
Esta pregunta ya tiene una respuesta aquí:
- Cómo usar filtro, mapear y reducir en Python 3 4 respuestas
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 lugar de obtener una lista, estoy recibiendo un mensaje como este.
<filter object at 0x00FDC550>
¿Qué significa esto? ¿Significa que mi el objeto filtrado, es decir, la lista que debe salir, ¿se almacena en esa ubicación de memoria? ¿Cómo obtengo la lista que necesito?
2 answers
Parece que estás usando python 3.x. En python3, filter
, map
, zip
, etc devuelve un objeto 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 se cambió porque (a menudo) quieres hacer el filtrado en un sentido perezoso't No necesitas consumir toda la memoria para crear una lista por adelantado, siempre y cuando el iterador devuelva lo mismo que una lista durante la iteración.
Si está familiarizado con la lista comprensiones y expresiones generadoras, el filtro anterior es ahora (casi) equivalente al siguiente en python3.x:
( x for x in data if func(x) )
A diferencia de:
[ x for x in data if func(x) ]
En python 2.x
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-07 13:37:24
Es un iterador devuelto por la función filter.
Si desea una lista, simplemente haga
list(filter(f, range(2, 25)))
Sin embargo, puede iterar sobre este objeto con un bucle for
.
for e in filter(f, range(2, 25)):
do_stuff(e)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-07 13:26:27