调用筛选器返回<筛选器对象位于... >



我正在学习Python中过滤器的概念。我正在运行这样一个简单的代码。

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

但我没有收到一份清单,而是收到了这样的信息。

<filter object at 0x00FDC550>

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

看起来您使用的是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) ]

在python 2.x 中

它是由filter函数返回的迭代器。

如果你想要一个列表,只需进行

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

尽管如此,您可以使用for循环来迭代该对象。

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

最新更新