我正在尝试熟悉 itertools
模块,并找到了一个名为 ifilter
的函数。
据我所知,它基于给定的函数对可迭代对象进行过滤,返回一个迭代器,该迭代器包含在函数评估为 True
的可迭代对象的元素。
问题1: 我目前的理解是否正确?
问题2: 除了返回迭代器之外,它与内置的 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]
。 - istrublelist(x for x in range(5) if x%2)
。 - Dan D.itertools.ifilter
,而filter
会表现得懒惰。 - Karl Knechtel