文档章节

零基础学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
Python 进程线程协程 GIL 闭包 与高阶函数(五)

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

善良小郎君
06/20
0
0
Python函数式编程中map()、reduce()和filter()函数的用法

Python中、和三个函数均是应用于序列的内置函数,分别对序列进行遍历、递归计算以及过滤操作。这三个内置函数在实际使用过程中常常和联合使用,我们首先介绍下lambda函数。1、lambda函数 la...

损失函数
05/24
0
0
Python二次元世界-Lisp的帝国斜阳 lambda与closure

Python二次元世界-函数式编程 Function , lambda与closure 本章讲述Python语言自Lisp语言演变而来的一些高级函数编程技巧 如闭包(closure) 匿名函数(lambda) 生成器(yield) 嵌套作用域(ne...

圣何塞白话人
2012/05/13
0
0
一个月入门Python爬虫,快速获取大规模数据

数据是创造和决策的原材料,高质量的数据都价值不菲。而利用爬虫,我们可以获取大量的价值数据,经分析可以发挥巨大的价值,比如: 豆瓣、知乎:爬取优质答案,筛选出各话题下热门内容,探索...

Python开发者
04/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

设计模式:简单工厂模式(静态共产方法模式)

简单工厂的构成包括三个角色: 1)抽象产品类 2)具体产品类(继承抽闲产品类) 3)工厂类(生产具体产品) 具体代码实现 1、抽象产品类 /** * 抽象类 */public abstract class Car ...

京一
6分钟前
0
0
Lombok使用

1 介绍 Lombok是一个简单的Java库,改工具可以通过注解自动地提供一些方法,简化开发。比如编写POJO时需要为每个属性提供getter()方法和setter()方法,这就可以使用Lombok实现。 2 配置 Lomb...

SuperHeroes
14分钟前
0
0
Confluence 6 删除垃圾内容

属性(profile)垃圾 属性垃圾的定义为,一个垃圾用户在 Confluence 创建了用户,但是这个用户在自己的属性页面中添加了垃圾 URL。 如果你有很多垃圾用户在你的系统中创建了属性,你可以使用...

honeymose
16分钟前
0
0
java虚拟机之内存模型

1. 概述 对于从事 C、C++ 程序开发的人员来说,在内存管理领域,他们既是拥有最高权力的「皇帝」又是从事基础工作的「劳动人民」 --- 既拥有每个对象的「所有权」,又担负着每一个对象生命开...

firepation
19分钟前
0
0
解决linux的-bash: ./xx: Permission denied

解决linux的-bash: ./xx: Permission denied 在linux下执行sh文件时提示下面信息: -bash: ./xx.sh: Permission denied解决:chmod 777 xx.sh 1 2 3 4 Linux chmod +755和chmod +777 ......

DemonsI
30分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部