**filter类** filter 在Python3.5 中的源码,只摘录了下面咱们比较关注的部分 ~~~ class filter(object): """ filter(function or None, iterable) --> filter object 根据传递的函数作用于每个元素返回值的真假将可迭代的元素生成一个新的迭代器,如果函数式 None ,返回全部 Return an iterator yielding those items of iterable for which function(item) is true. If function is None, return the items that are true. """ def __init__(self, function_or_None, iterable): # real signature unknown; restored from __doc__ pass ~~~ filter() 将传入的函数依次作用于每个元素,然后根据返回值是 True 或 False 判断是保留还是丢弃该元素,生成一个新的迭代器。 实例1:过滤掉列表中的字符串 ~~~ >>> def isNum(n): #定义函数 ... return isinstance(n,int) ... >>> filter(isNum,['1',2,'air',3,4,5]) #调用 filter 得到一个迭代器 <filter object at 0x7f9c3db02a58> >>> >>> list(filter(isNum,['1',2,'air',3,4,5])) #获得列表 [2, 3, 4, 5] ~~~ filter() 函数返回的是一个 Iterator 是一个惰性序列,要得到 filter() 的计算结果,需要用 list() 函数获得所有结果并返回 list。 使用匿名函数改写 ~~~ >>> list(filter(lambda n:isinstance(n,int),['1',2,'air',3,4,5])) [2, 3, 4, 5] ~~~ 实例2:计算回数 数学上:一般的,一个自然数,如果该自然数从左向右读和从右向左读都是一样的数,则这个数为回数。比如101,32123,9999等等都是回数。 ~~~ >>> def is_palindrome(n): ... s = str(n) ... if s[::] == s[::-1]: ... return True ... >>> list(filter(is_palindrome,list(range(0,1000)))) ~~~