我正在学习Python中过滤器的概念。我正在运行一个简单的代码,如下所示。
>>> def f(x): return x % 2 != 0 and x % 3 != 0
>>> filter(f, range(2, 25))
但是,我并没有得到一个列表,而是收到了一些这样的消息。
<filter object at 0x00FDC550>
这是什么意思?这是不是意味着我过滤出来的对象,也就是列表被存储在那个内存位置?我如何获得我需要的列表?
发布于 2012-09-07 21:26:13
看起来您使用的是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中
https://stackoverflow.com/questions/12319025
复制相似问题