filter 和ifilter这两个函数是内置模块itertools  提供的,通过两个例子来了解一下他们的作用

from itertools import *

lst = [3,6,1,4,8,6]
lst2 = filter(lambda x:x>3,lst)
print type(lst2)
print lst2


打印结果为:

<type 'list'>
[6, 4, 8, 6]


filter通过lambda对lst进行过滤,凡是大于3的元素都不保留了下来,并返回一个新的list


from itertools import *

lst = [3,6,1,4,8,6]
lst2 = ifilter(lambda x:x>3,lst)
print type(lst2)
for i in lst2:
print i


打印结果为:

<type 'itertools.ifilter'>
6
4
8
6


使用iflter,也是对lst进行过滤,但返回的并不是list,而是一个生成器,此时,6,4,8,6都是不存在的,只有在for循环中具体使用时才会存在,不光如此,对于lst2,我们只能使用一次

from itertools import *

lst = [3,6,1,4,8,6]
lst2 = ifilter(lambda x:x>3,lst)
print type(lst2)
for i in lst2:
print i

for i in lst2:
print i


第二次的for循环什么也不会打印,因为第一次for循环时,生成器已经遍历到末尾。