首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >调用filter返回<filter object at ... >

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

Stack Overflow用户
提问于 2012-09-07 21:25:22
回答 2查看 131K关注 0票数 121

我正在学习Python中过滤器的概念。我正在运行一个简单的代码,如下所示。

代码语言:javascript
复制
>>> def f(x): return x % 2 != 0 and x % 3 != 0
>>> filter(f, range(2, 25))

但是,我并没有得到一个列表,而是收到了一些这样的消息。

代码语言:javascript
复制
<filter object at 0x00FDC550>

这是什么意思?这是不是意味着我过滤出来的对象,也就是列表被存储在那个内存位置?我如何获得我需要的列表?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-07 21:26:13

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

代码语言:javascript
复制
filter(func,data) #python 2.x

等同于:

代码语言:javascript
复制
list(filter(func,data)) #python 3.x

我认为它的改变是因为您(通常)希望以一种懒惰的方式进行过滤--您不需要消耗所有内存来预先创建一个列表,只要迭代器在迭代期间返回与列表相同的内容即可。

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

代码语言:javascript
复制
( x for x in data if func(x) ) 

与此相对的是:

代码语言:javascript
复制
[ x for x in data if func(x) ]

在python 2.x中

票数 203
EN

Stack Overflow用户

发布于 2012-09-07 21:26:28

它是由filter函数返回的iterator

如果你想要一个列表,只需这样做

代码语言:javascript
复制
list(filter(f, range(2, 25)))

尽管如此,您可以使用for循环遍历此对象。

代码语言:javascript
复制
for e in filter(f, range(2, 25)):
    do_stuff(e)
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12319025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档