这一章节我们来讨论一下函数式编程工具:filter和reduce
1.filter
filter主要用于过滤序列的某些对象
>>> def test(x):
if x>0:
return x
>>> list(filter(test,range(-5,5)))
[1, 2, 3, 4]
>>>
上面是filter联合def函数,过滤列表小于0的对象
我们使用lambda表达式改进上面的代码
>>> list(filter(lambda x:x>0,range(-5,5)))
[1, 2, 3, 4]
>>>
由于filter跟map类似都是返回一个可迭代对象,因此都需要通过list来显示
我们下面尝试模拟filter的实现:
>>> def test(aList):
res=[]
for item in aList:
if item > 0:
res.append(item)
return res
>>> test(range(-5,5))
[1, 2, 3, 4]
>>>
由于filter是内建函数,因此速度比上面的for要来得快
2.reduce
reduce主要用于对每对对象进行运算,直到最后结果,在python3.x里面reduce已经被放到functools模块里面去
>>> from functools import reduce
>>> reduce((lambda x ,y : x+y),[1,2,3,4])
10
>>> reduce((lambda x ,y : x*y),[1,2,3,4])
24
>>> reduce((lambda x ,y : x/y),[1,2,3,4])
0.041666666666666664
>>>
我们下面模拟上面reduce的实现,使得大家有一个更加直观的理解
>>> aList=[1,2,3,4]
>>> def add(aList):
if not aList:
return 0
else:
return aList[0]+test(aList[1:])
>>> test(aList)
10
>>> def muti(aList):
if not aList:
return 0
else:
return aList[0]*test(aList[1:])
>>> test(aList)
10
>>>
大家是不是觉得上面很熟悉,其实在递归的时候我们就已经详细说明了上面的函数,有兴趣的可以返回去看看递归这一章节。
reduce其实就是对序列里面每对对象进行操作,然后返回操作的结果,形成新的对象,知道对象只剩下一个,形成最后的结果。
总结,这一章节我们简单介绍了filter和reduce,并且模拟了这两个内建函数的大部分实现。
这一章节就说到这里,谢谢大家
------------------------------------------------------------------
点击跳转零基础学python-目录
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
ubuntu-18.10-desktop-amd64 操作系统 网盘下载地址 确保资源可用
ubuntu-18.10-desktop-amd64.iso
aspose-words-18.10-jdk16.jar aspose-cells-20.4 - c.jar
Bloomberg Businessweek - 18.10.2021
资源来自pypi官网。 资源全名:pulsectl-18.10.6-py2.py3-none-any.whl
资源来自pypi官网。 资源全名:fluidasserts-18.10.32798-py2.py3-none-any.whl
维盟FBM-290W固件,版本FBM_290W-18.10.22V,亲测可用,可用于升级降级,直接系统控制界面
aspose words for java做导出word的功能 aspose-words-jdk等资源。把最新最全的aspose-words-jdk推荐给您,让您轻松找到相关应用信息,并提供aspose-words-jdk下载等功能。本站致力于为用户提供更好的下载体验,如未能...
aspose-words-18.6-jdk16 aspose-cells-8.5.2.jar
本资源是eric6相关安装包,其中包含了eric6-18.10安装包和eric6用的中文包含汉化安装包
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时
用于word转pdf aspose-words-15.8.0-jdk16.jar
aspose插件将word转pdf,无水印,个人学习使用,请勿用于商业用途
1.15 应用编程接口 12 1.16 测试网络 13 1.17 小结 13 第2章 链路层 15 2.1 引言 15 2.2 以太网和IEEE 802封装 15 2.3 尾部封装 17 2.4 SLIP:串行线路IP 17 2.5 压缩的SLIP 18 2.6 PPP:点对点协议 18 2.7 环回接口...
可用aspose-words-18.8-jdk16.jar版本,对应lincense Aspose.Total for Java Enterprise 20991231 20991231 8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7 sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9...
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时
Unix域协议:I/O和描述符的传递 18.1 概述 210 18.2 PRU_SEND和PRU_RCVD请求 210 18.3 描述符的传递 214 18.4 unp_internalize函数 218 ...18.10 unp_mark函数 230 18.11 性能(再讨论) 231 18.12 小结 231
随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷...