我正在学习 Python 中过滤器的概念。我正在运行这样的简单代码。
>>> def f(x): return x % 2 != 0 and x % 3 != 0
>>> filter(f, range(2, 25))
但是,我收到的不是列表,而是这样的消息。
<filter object at 0x00FDC550>
这是什么意思?这是否意味着我的过滤对象(即要出来的列表)存储在该内存位置?如何获得我需要的清单?
我正在学习 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 中,filter
, map
,zip
等返回一个可迭代的对象,但不是一个列表。换句话说,
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 中