清风白茶

我们都会上岸,阳光万里,去哪里都是鲜花开放。
python高阶函数map/reduce/filter总结

python高阶函数map/reduce/filter总结

map/reduce/filter 是 python中比较常用的内建高阶函数,它们为函数式编程提供了支持。 在做leetcode的时候碰到不少代码可以用这三个函数来精简代码的情况,这里做一下总结。

1. map

map(function, sequence)

map函数有两个接受参数,第一个是function,第二个是sequence.map函数在执行的时候会依次取出sequence所有的值作为function的参数进行调用,并把得到的结果作为一个iterator返回。例如把列表中字符转为数字:

1
2
3
res = map(int, ['1','2','3'])		# 这一步返回的是一个迭代器(iterator)
res = list(res) # 使用list将其转为列表
print(res) # 打印 [1,2,3]

对列表中的数求平方:

1
2
3
res = map(lambda x: x*x, [1,2,3])
res = list(res)
print(res) # 打印 [1,4,9]

2.reduce

reduce函数并不是python的内建函数需要另外导入。

1
from functools import reduce

和map函数类似,reduce函数同样接受两个参数functionsequence

与map函数不同的是,传给reduce的函数必须接受两个参数,reduce会把序列中的前两个值传给function并把返回结果与序列中的下一个值再次传入给funciton直到序列最后一个元素。

简而言之,reduce函数是根据传入的funcition对传入的序列做累积运算。例如列表求和:

1
2
3
from functools import reduce
res = reduce(lambda x, y: x + y,[1,2,3])
print(res) # print 6

3. filter

filter函数用于过滤元素,同样接受一个过滤函数和一个序列。将过滤函数依次作用于序列中的每一个元素。当过滤函数返回值为True时,保留序列中的元素,否则丢弃。最后返回一个迭代器。

例如过滤列表中的偶数,留下奇数。

1
2
res = list(filter(lambda x: x%2==1, [1,2,3,4,5,6]))
print(res) # print [1,3,5]

4. 总结

map/reduce/filter都是将传入的函数,依次作用于序列中的每一个元素,最后map/filter返回迭代器,reduce返回一个值。

参考文章

  1. python廖雪峰教程

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×