首页 文章

Python3中的过滤器[重复]

提问于
浏览
85

这个问题在这里已有答案:

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

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

但是我没有得到列表,而是得到了这样的消息 .

<filter object at 0x00FDC550>

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

2 回答

  • 19

    看起来你正在使用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中

  • 137

    这是filter函数返回的iterator .

    如果你想要一个清单,就行了

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

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

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

相关问题