1 描述
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
2 语法
filter(function, iterable)
- function -- 函数,过滤可迭代对象
- iterable -- 可迭代对象。
序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
返回值:符合要求的 迭代器(python3),而python2中则直接返回新的列表
关于filter()方法, python3和python2有一点不同
python2中返回的是过滤后的列表, 而python3中返回到是一个filter类
filter类实现了__iter__和__next__方法, 可以看成是一个迭代器, 有惰性运算的特性, 相对python2提升了性能, 可以节约内存.
def isodd(x): return x % 2 == 1 odd = filter(isodd,range(10)) print(odd)
在python2中运行结果
[1, 3, 5, 7, 9]
在python3中运行结果
<filter object at 0x7f1d29e80828>
3 示例
def isodd(x): return x % 2 == 1 odd = filter(isodd,range(10)) print([x for x in odd]) #[1, 3, 5, 7, 9]
4 小题练习
4.1 将1~20 的偶数用 filter 生成可迭代对象,并放入一个列表
4.2 1~20 素数用filter过滤
def prime(x): num_helf = x//2 + 1 for i in range(2,num_helf): if x % i == 0: break else: return x prime_list = filter(prime,range(21)) print([i for i in prime_list]) #[1, 2, 3, 5, 7, 11, 13, 17, 19]
或者
def is_prime(x): for i in range(2,x // 2 + 1): if x % i == 0: return False return True print([x for x in filter(is_prime,range(2,21))])