博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
map/reduce函数
阅读量:5307 次
发布时间:2019-06-14

本文共 1093 字,大约阅读时间需要 3 分钟。

map

map()函数接受两个值,一个是函数,另一个是Iterable,map将传入的函数依次作用于序列的每一个元素,并将结果作为一个新的Iterator返回。

我们想把f(x)=x²作用于一个列表[1,2,3,4,5,6,7,8,9],就可以这样做

>>> def f(x):	return x*x>>> res = map(f,[1,2,4,5,6,7,8,9])>>> print(res)>>> list(res)[1, 4, 16, 25, 36, 49, 64, 81]

map()传入的第一个参数是f,结果res是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。

还可以计算复杂的函数,将数字转化为字符串

>>> r = map(str,[1,2,3,4,5])>>> list(r)['1', '2', '3', '4', '5']

 

reduce

reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4) 

 把[1,2,3,4]变成整数1234,reduce就派上用场了

>>> from functools import reduce >>> def fn(x,y):	return x*10+y>>> reduce(fn,[1,2,3,4])1234

 

有个很有意思的例子,考虑到str本身也是一个序列,我可以配合map函数将str转换成int,其实没什么卵用,因为python提供了int()函数

>>> def fn(x,y):	return x*10+y>>> def char_to_num(s):	return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]>>> reduce(fn,map(char_to_num,'13568'))13568

先用map()函数将char_to_num()作用于序列‘13568’,得到[1,3,5,6,8]这样一个Iterator对象,再利用reduce()函数处理。就实现了将str转换为int的功能。

 

 

转载于:https://www.cnblogs.com/mingo724/p/7223261.html

你可能感兴趣的文章
模拟信号的采样
查看>>
SSHDemo
查看>>
日志模块---logging
查看>>
[转]不优雅的方式处理 xlrd 中 int/float 的问题
查看>>
vue24-webpack+vue-loader
查看>>
Java内存模型
查看>>
Linux 查看服务器硬件信息
查看>>
写一个根据现有窗体生成自绘窗体代码
查看>>
禁止密码显示框
查看>>
想做自媒体,做什么样的内容呢,怎么做呢--第006期博文
查看>>
深入基础(三)回调函数,文件处理
查看>>
Java发邮件基础篇
查看>>
.net core编写转发服务(三) 接入Polly
查看>>
找到一篇关于2.4/5G信道的新介绍
查看>>
substring()方法
查看>>
css3阴影效果
查看>>
C# 获取某月的第一天和最后一天
查看>>
FileReader上传文件
查看>>
MySQL 系统架构 说明
查看>>
win7下sublime text3 安装Emmet的pyv8
查看>>