内容来自廖雪峰的官方网站。
1、Python内建的filter()
函数用于过滤序列。
2、和map()
类似,filter()
也接收一个函数和一个序列。和map()
不同的是,filter()
把传入的函数依次作用于每个元素,然后根据返回值是True
还是False
决定保留还是丢弃该元素。
3、例如:过滤出不及格的学生。
>>> def is_fail(n): ... if n < 60 : ... return True ... else: ... return False ... >>> list(filter(is_fail, [55, 65, 77, 47, 43, 88, 99])) [55, 47, 43]
注意到filter()
函数返回的是一个Iterator
,也就是一个惰性序列,所以要强迫filter()
完成计算结果,需要用list()
函数获得所有结果并返回list。
4、用fillter求素数
diy版本(按字面意思翻译)
def is_prime(n): if n <= 1: return False for i in range(2, n): if n % i == 0: return False return True
>>> from test import is_prime >>> is_prime(3) True >>> is_prime(4) False >>> list(filter(is_prime, [1, 2, 3, 4, 5, 6, 7])) [2, 3, 5, 7]
5、遇到一个小问题:如果在交互界面漏括号
>>> list(filter(is_prime, list(range(1, 8)))) [2, 3, 5, 7] >>> list(filter(is_prime, list(range(1, 8))) ... ...