一、map/reduce
1.map()
map(f,iterable),将一个iterable对象一次作用于函数f,并返回一个迭代器。
>>> def f(x): #定义一个函数
... return x*x
...
>>> L = list(range(10))#生成一个列表,它是 Iterable
>>> map(f,L) #调用map函数
<map object at 0x000001AB00C1AC18>
>>> obj = map(f,L)
>>> next(obj)
0
>>>
>>> next(obj)
1
>>> next(obj)
4
>>> next(obj)
9
>>> for i in obj:
... print(i)
...
16
25
36
49
64
81
>>> isinstance(obj,Iterator) #可以看到返回的obj是一个Iterator
True
2.reduce()
reduce(f,Iterable),把一个函数作用在一个序列[x1, x2, x3, ...]
上,这个函数必须接收两个参数,reduce
把结果继续和序列的下一个元素做累积计算,其效果就是:特点是把第一次函数运算的结果作为第二次运算的第一个参数。
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
>>> L = list(range(10)) #创建一个列表
>>> def f(x1,x2):
... return x1*10+x2
...
>>> reduce(f,L)
123456789
map和reduce的混合使用实现从str转化为int
>>> from functools import reduce
>>> DIGITS = {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}
>>> def char2num(s):
... return DIGITS[s]
...
>>> def str2int(s):
... return reduce(lambda x, y: x * 10 + y, map(char2num, s))
...
>>> str2int("")
654321
二、filter函数
filter(f,Iterable),和map()
类似,filter()
也接收一个函数和一个序列。和map()
不同的是,filter()
把传入的函数依次作用于每个元素,然后如果返回值是True
保留该元素,False
丢弃该元素。返回的也是一个Iterator.
>>> def f(x):
... return x%2==0
...
>>> f(0)
True
>>> from collections import Iterator
>>> f = filter(f,[0,1,2,3,4,5])
>>> isinstance(f,Iterator)
True
>>> next(f)
0
>>> next(f)
2
>>> next(f)
4
>>> next(f)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
三、sorted
sorted()我们用来排序,除了默认的排序方式,我们还可以自定义排序的规则。
sorted(l,key=f) 例如key=abs,这里的abs是求绝对值的函数,我们就会按照绝对值的方式排序。
>>> abs(-1)
1
>>> sorted([-9,-3,-1,2,4,6],key=abs)
[-1, 2, -3, 4, 6, -9] >>> sorted([-9,-3,-1,2,4,6],key=abs,reverse=True)
[-9, 6, 4, -3, 2, -1]
按照首字母排序,不考虑大小写。
>>> sorted(['bob', 'about', 'Zoo', 'Credit'])
['Credit', 'Zoo', 'about', 'bob']
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']
python笔记十四(高阶函数——map/reduce、filter、sorted)的更多相关文章
-
python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))
1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...
-
Python学习 Day 5 高阶函数 map/reduce filter sorter 返回函数 匿名函数 装饰器 偏函数
高阶函数Higher-orderfunction 变量可以指向函数 >>> abs #abs(-10)是函数调用,而abs是函数本身 <built-in function ab ...
-
Python 函数式编程 &; Python中的高阶函数map reduce filter 和sorted
1. 函数式编程 1)概念 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念.wiki 我们知道,对象是面向对象的第一型,那么函数式编程也是一样,函数是函数 ...
-
JavaScript高阶函数 map reduce filter sort
本文是笔者在看廖雪峰老师JavaScript教程时的个人总结 高阶函数 一个函数就接收另一个函数作为参数,这种函数就称之为高阶函数 1.高阶函数之map: ...
-
Python高阶函数_map/reduce/filter函数
本篇将开始介绍python高阶函数map/reduce/filter的用法,更多内容请参考:Python学习指南 map/reduce Python内建了map()和reduce()函数. 如果你读过 ...
-
辅助函数和高阶函数 map、filter、reduce
辅助函数和高阶函数 map.filter.reduce: 一.辅助函数:(1-1)响应式函数 (数组更新检测): push() pop() shift() unshift() ...
-
python六十课——高阶函数之map
1.高阶函数: 特点:函数的形参位置必须接受一个函数对象 分类学习: 1).map(fn,lsd1,[lsd2...]): 参数一:fn --> 函数对象 参数二:lsd1 --> 序列对 ...
-
python之高阶函数map/reduce
L = [] for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]: L.append(f(n)) print(L) Python内建了map()和reduce()函数. 我们先看 ...
-
python笔记十三(高阶函数、装饰器)
一.高阶函数 函数只要有以下两个特征中一个就可以称为高阶函数: a:函数名作为一个实参传入另一个函数中 b:函数的返回值中包含函数名 下面我们用代码来感受一下这两种形式: import time # ...
-
JavaScript高阶函数map/reduce、filter和sort
map() 举例说明,比如我们有一个函数f(x)=x²,要把这个函数作用在一个数组[1,2,3,4,5,6,7,8,9]上. 由于map()方法定义在JavaScript的Array中,我们调用Arr ...
随机推荐
-
《学技术练英语》PPT分享
之前做的一个PPT,分享给博客园的同学. 下载地址: 学技术练英语.pdf 技术是靠自己去学的,学技术不能仅仅是看书看博客,最好是有实践,不管是做实验去验证,还是写各种代码去玩各种特性,还是造*都是 ...
-
webrtc第二篇 聊天室
聊天室模型不一样考虑的问题也不一样 1.websocket文本聊天 * step1 : 向聊天室所有用户(不包括该用户自己)发送当前用户上线信息.客户端用户栏回添加此用户 * step2 : 将该用户 ...
-
hdu1798(几何面积计算)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1798 题意:给出两个圆的圆心坐标与半径,求他们相交部分的大小 思路:有三种情况: 1. 两圆相离,ar ...
-
流媒体一些server
(1)darwin stream server (2)red5 (3)nginx rtmp
-
PLC梯形图编程练习
在PLC培训软件中完成如下两个练习,并把对应的梯形图程序发表在博客上. 交通灯控制 在如下图的场景中,打开SW1开关后,交通灯控制器开始工作,关闭SW1则控制器停止工作. SW2为控制模式选择开关: ...
- MyEclipse-File Serarch时报错:Problems encountered during text search
-
Abap 内表的语法
ABAP中的内表相当于其他程序设计语言中的二维数组,存储多行结构相同的数据 不同于二维数组,内表在创建后,列结构与列数是固定不变的,而行数是动态增长的 内表支持循环对每行数据进行操作,也支持整体操作 ...
-
C#中经常使用的几种读取XML文件的方法
XML文件是一种经常使用的文件格式,比如WinForm里面的app.config以及Web程序中的web.config文件,还有很多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖 ...
-
企业信息化快速开发平台--JeeSite
JeeSite是在Spring Framework基础上搭建的一个Java基础开发平台,以Spring MVC为模型视图控制器,MyBatis为数据访问层, Apache Shiro为权限授权层,Eh ...
-
js中uuid不被识别
后台传了uuid值给前台,然后js报错 原因:反正就是js不认你这个字符串,他觉得你这是应该是数字,但是后面想了想,也不是数字啊,然后就不认了. 解决办法:告诉他,为夫这里是字符串.拼接html的时候 ...