Python 内置函数 filter、map、reduce、lambda使用
Admin
2019-04-28 15:19:03
Python
filter(function, sequence)
lst = ['1', '2','3', '4'] def func(x): return x if x != '1' else None ret = filter(func, lst) print ret # ['2', '3', '4']
对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回(过滤函数)。
map(function, sequence)
lst = ['1', '2','3', '3'] def func(x): return x + ".map" ret = map(func, lst) print ret # ['1.map', '2.map', '3.map', '3.map']
对sequence中的item依次执行function(item),执行结果组成一个List返回,map也支持多个sequence,这就要求function也支持相应数量的参数输入:
def add(x, y): return x+y print map(add, range(10), range(10)) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
reduce(function, sequence, starting_value)
def add(x,y): return x + y print reduce(add, range(1, 100)) print reduce(add, range(1, 100), 10) # 加10 # 4950 (注:1+2+...+99) # 4970 (注:1+2+...+99+20)
对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用,如可以用来对List求和
lambda(匿名函数)
func = lambda x: x * 2 print func(2) print (lambda x: x * 2) (2) # 4
可以认为,lambda是一个表达式,定义了一个匿名函数,x为入口参数,x*2为函数体,用函数来表示为:
def func(x): return x * 2
函数组合使用
lst = [1,2,3] print map(lambda x: x * 2, lst) # [2, 4, 6] print [x * 2 for x in lst] # 也可以这样写 print filter(lambda x: x % 2 == 0, lst) # [2] print [x for x in lst if x % 2 == 0] # 也可以这样写