|
|
|
|
移动端

3.1.3 函数 map()、filter()和 reduce()

《自学Python:编程基础、科学计算及数据分析》第3章Python 进阶,在本章中,我们将学习 Python的一些进阶用法,包括函数的进阶,迭代器、生成器、装饰器、上下文管理器的使用,以及 Python中的变量作用域。本节为大家介绍数 map()、filter()和 reduce()。

作者:李金来源:机械工业出版社|2018-05-04 13:22

人工智能+区块链的发展趋势及应用调研报告


3.1.3 函数 map()、filter()和 reduce()

map()函数接受一个函数f和一个序列sq:

  1. map(f, sq) 

其作用是将函数 f作用在序列的所有元素上,等价于:

  1. [f(x) for x in sq] 

filter()函数也接受一个函数f和一个序列sq:

  1. filter(f, sq) 

其作用是通过函数f来筛选序列中的元素,等价于:

  1. [x for x in sq if f(x)] 

比如一个判断偶数的函数:

  1. In [1]: def is_even(x):  
  2.    ...:     return x % 2 == 0  
  3.    ...: 

使用filter()函数,可以得到序列中的所有偶数:

  1. In [2]: filter(is_even, range(5))   
  2. Out[2]: [0, 2, 4] 

还可以将map()函数和filter()函数一起使用,求序列中所有偶数的平方:

  1. In [3]: map(square, filter(is_even, range(5)))   
  2. Out[3]: [0, 4, 16] 

相当于:

  1. [square(x) for x in range(5) if is_even(x)] 

另一个常用的高阶函数为reduce()函数,其基本用法为:

  1. reduce(f, sq) 

与 map()函数和 filter()函数不同,reduce()函数接受的是一个支持二元操作的函数:f(x, y),实现对序列sq中的元素累加计算,并返回单一的结果。定义一个加法函数:

  1. In [4]: def add(x, y):  
  2.    ...:     return x + y  
  3.    ...:  

将该函数作为reduce()函数的参数使用:

  1. In [5]: reduce(add, [1,2,3,4,5])   
  2. Out[5]: 15 

这种用法相当于进行了一个这样的一个计算:((((1+2)+3)+4)+5)。第一步计算的输入参数是序列的前两个元素,并将得到的结果与下一个元素进行计算,直到最后一个元素。

reduce()函数还可以提供初始值:

  1. In [6]: reduce(add, [1,2,3,4,5], 10)   
  2. Out[6]: 25 

给定初始值时,第一步计算的输入参数是初始值 10与序列的第一个元素1,而不是序列的前两个元素 1和2。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

主流ARM嵌入式系统设计技术与实例精解

本书重点介绍了主流ARM应用系统的开发与实践。全书基于目前较为通用、流行的ARM处理器,介绍了其原理、硬件结构、硬件电路设计与开发和软件...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊