【发布时间】:2018-08-09 08:54:56
【问题描述】:
我正在尝试更加熟悉itertools 模块并找到了一个名为ifilter 的函数。
据我了解,它根据给定函数过滤和迭代,并在包含迭代元素的列表上返回一个迭代器,该函数在其上计算为True。
问题 1:到目前为止我的理解是否正确?
问题2:除了this返回和迭代器之外,它与内置的filter函数有什么不同?
问题 3哪个更快?
据我所知,事实并非如此。我错过了什么吗? (我进行了以下测试)
>>> itertools.ifilter(lambda x: x%2, range(5))
<itertools.ifilter object at 0x7fb1a101b210>
>>> for i in itertools.ifilter(lambda x: x%2, range(5)): print i
...
1
3
>>> filter(lambda x: x%2, range(5))
[1, 3]
>>> function = lambda x: x%2
>>> [item for item in range(5) if function(item)]
[1,3]
【问题讨论】:
-
您期望的输出是什么?
range(5)会给你[0,1,2,3,4]。 -
请注意,过滤器的大多数用法都可以替换为生成器/列表表达式上的守卫:
list(x for x in range(5) if x%2)
标签: python function module built-in