文档章节

零基础学python-18.10 函数式编程工具:filter和reduce

raylee2015
 raylee2015
发布于 2015/10/21 08:10
字数 513
阅读 3
收藏 0

这一章节我们来讨论一下函数式编程工具: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-目录



版权声明:本文为博主原创文章,未经博主允许不得转载。

本文转载自:http://blog.csdn.net/raylee2007/article/details/48637329

共有 人打赏支持
raylee2015
粉丝 6
博文 265
码字总数 44224
作品 0
江门
基于编程人员Python学习第一章节

基于廖雪峰的python零基础学习后,自我总结。适用于有一定基础的编程人员,对我而言,则是基于.net已有方面,通过学习,记录自我觉得有用的地方,便于后续回顾。 主要以快速定位内容,通过直...

Aikenwu
08/13
0
0
10分钟快速入门Python函数式编程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/82117264 作者 | Brandon Skerritt 译者 | 王天宇、琥珀 编辑 | 琥珀 出品...

AI科技大本营
08/27
0
0
零基础如何优雅入门“网红”Python?小白必看的MicroPython视频合集:从入门到精通!

零基础如何优雅入门“网红”Python?小白必看的MicroPython视频合集:从入门到精通! 若问时下最火的一门编程语言是什么?答案一定是Python。 就连高考都开始考Python啦! 这把火已经烧到了程...

bodasisiter
09/10
0
0
Python 进程线程协程 GIL 闭包 与高阶函数(五)

1 GIL线程全局锁 线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的限制,说白了就是一个核只能在同一时间运行一个线程.对于io密集型任务,python的多线程...

善良小郎君
06/20
0
0
Python基础总结成千行代码,让Python入门更简单!

只要学会这千行代码,不管你是零基础还是弱基础或是没有接触过编程,都可以快速入门Python!当时我就不信邪啊,等我看完之后,即使作为一个Python老鸟了,还是领会到了很多教授他的独特见解!...

糖宝lsh
09/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

自己手写一个 SpringMVC 框架

前端框架很多,但没有一个框架称霸,后端框架现在Spring已经完成大一统.所以学习Spring是Java程序员的必修课. Spring 框架对于 Java 后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,...

别打我会飞
9分钟前
0
0
01-《Apache Tomcat 9》之文件索引

《Apache Tomcat 9》是《看Apache官方文档学英语》的第一个专栏!让我们一起在看文档的过程中学英语,在学英语的过程中夯实技术! Documentation Index - 文件索引 Introduction - 介绍 This...

飞鱼说编程
10分钟前
0
0
最近

20181016最近在熟悉业务 关于money的 要涉及到流程中转同步 这个点感觉 业务大于技术 关于业务性的内容 还是要把自己及时清零的好 我们需要好好的梳理下业务内容 业务作为导向 技术提供解决方...

JAVA码猿
20分钟前
0
0
JDK1.8HashMap源码分析

HashMap和Hashtable的主要区别是: 1. Hashtable是线程安全,而HashMap则非线程安全,Hashtable的实现方法里面大部分都添加了synchronized关键字来确保线程同步,因此相对而言HashMap性能会高...

小小明童鞋
30分钟前
15
0
以Redis为例,详谈分布式系统缓存的细枝末节

前言: 在分布式Web程序设计中,解决高并发以及内部解耦的关键技术离不开缓存和队列,而缓存角色类似计算机硬件中CPU的各级缓存。如今的业务规模稍大的互联网项目,即使在最初beta版的开发上...

Java干货分享
33分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部