调用 filter 返回 < filter object at... >

我正在学习 Python 中过滤器的概念。

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

But instead of getting a list, I am getting some message like this.

<filter object at 0x00FDC550>

这是什么意思?这是否意味着我的过滤对象(即要出来的列表)存储在该内存位置?我如何得到我需要的列表?

139969 次浏览

看起来你用的是 python 3. x。在 python3中,filtermapzip等返回一个可迭代但不是列表的对象。换句话说,

filter(func,data) #python 2.x

等同于:

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

我认为它之所以发生了变化,是因为您(通常)希望以一种懒惰的方式进行过滤——只要迭代器返回与列表在迭代过程中返回的内容相同的内容,就不需要预先消耗所有内存来创建列表。

如果您熟悉列表理解和生成器表达式,那么上面的过滤器现在(几乎)相当于 python3.x 中的以下内容:

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

而不是:

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

in python 2.x

它是由 过滤器函数返回的 迭代器

如果你想要一份清单,那就去做吧

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

Nonetheless, you can just iterate over this object with a for loop.

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