我正在学习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。在Python 3中,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 中
len(list(filter(...)))
而不是len(filter(...))
。 - mgilson