调用过滤器返回 <filter object at ... > [重复]
- 2025-03-04 08:23:00
- admin 原创
- 82
问题描述:
我正在学习 Python 中的过滤器概念。我正在运行像这样的简单代码。
>>> def f(x): return x % 2 != 0 and x % 3 != 0
>>> filter(f, range(2, 25))
但是,我没有得到列表,而是收到了这样的消息。
<filter object at 0x00FDC550>
这是什么意思?这是否意味着我要过滤的对象(即要显示的列表)存储在该内存位置?我如何获取所需的列表?
解决方案 1:
看起来你使用的是 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 中
解决方案 2:
它是过滤函数返回的迭代器。
如果你想要一个列表,只需这样做
list(filter(f, range(2, 25)))
尽管如此,您只需使用循环来迭代该对象即可for
。
for e in filter(f, range(2, 25)):
do_stuff(e)
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD