filter函数:
filter()函数可以对序列做过滤处理,就是说可以使用一个自定的函数过滤一个序列,把序列的每一项传到自定义的过滤函数里处理,并返回结果做过滤。最终一次性返回过滤后的结果。
filter()函数有两个参数:
第一个,自定函数名,必须的
第二个,需要过滤的列,也是必须的
代码如下 | 复制代码 |
from random import randint allNums = [] for eachNum in range(9): allNums.append(randint(1, 99)) print filter(lambda n: n%2, allNums) |
filter就是把前边的函数应用到没个元素上,然后true的留下,false的滚
代码如下 | 复制代码 |
>>> map((lambda x: x+2), [0, 1, 2, 3, 4, 5]) [2, 3, 4, 5, 6, 7] >>> >>> map(lambda x: x**2, range(6)) [0, 1, 4, 9, 16, 25] >>> [x+2 for x in range(6)] [2, 3, 4, 5, 6, 7] >>> >>>[x**2 for x in range(6)] [0, 1, 4, 9, 16, 25] |
map的作用是将函数应用到没个元素,得到一个由新元素组成的新的数组
代码如下 | 复制代码 |
>>> print 'the total is:', reduce((lambda x,y: x+y), range(5)) the total is: 10 给出了上面的输入,reduce()函数运行了如下的算术操作。 ((((0 + 1) + 2) + 3) + 4) => 10 |
reduce的效果就在上边,前来两个得到一个新的,然后新的元素和第三个进行处理…..
代码如下 | 复制代码 |
# coding=utf8 # 定义大于5小于10的函数 执行结果: (8, 9, 6) |
因为8,9,6大于5,小于10所以被过滤下来了
可以看例子:
代码如下 | 复制代码 |
1 filter(function, sequence): str = ['a', 'b','c', 'd'] def fun1(s): return s if s != 'a' else None ret = filter(fun1, str) print ret ## ['b', 'c', 'd'] |
对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回。
可以看作是过滤函数。
例如,在一个list中,删掉偶数,只保留奇数,可以这么写:
代码如下 | 复制代码 |
def is_odd(n): return n % 2 == 1 filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]) # 结果: [1, 5, 9, 15] |
把一个序列中的空字符串删掉,可以这么写:
代码如下 | 复制代码 |
def not_empty(s): return s and s.strip() filter(not_empty, ['A', '', 'B', None, 'C', ' ']) # 结果: ['A', 'B', 'C'] |
可见用filter()这个高阶函数,关键在于正确实现一个“筛选”函数。