Python中map()函数浅析

MapReduce的设计灵感来自于函数式编程,这里不打算提MapReduce,就拿python中的map()函数来学习一下。

文档中的介绍在这里:

map(function, iterable, ...)

Apply function to every item of iterable and return a list of the results. If additional iterablearguments are passed, function must take that many arguments and is applied to the items from all iterables in parallel. If one iterable is shorter than another it is assumed to be extended withNoneitems. If function isNone, the identity function is assumed; if there are multiple arguments, map() returns a list consisting of tuples containing the corresponding items from all iterables (a kind of transpose operation). The iterable arguments may be a sequence or any iterable object; the result is always a list.

一点一点看:

1、对可迭代函数'iterable'中的每一个元素应用‘function’方法,将结果作为list返回。

来个例子:

?
1
2
3
4
5
6
>>> def add100(x):
...     return x+100
...
>>> hh = [11,22,33]
>>> map(add100,hh)
[111, 122, 133]
就像文档中说的:对hh中的元素做了add100,返回了结果的list。


2、如果给出了额外的可迭代参数,则对每个可迭代参数中的元素‘并行’的应用‘function’。(翻译的不好,这里的关键是‘并行’)

?
1
2
3
4
5
6
7
8
>>> def abc(a, b, c):
...     return a*10000 + b*100 + c
...
>>> list1 = [11,22,33]
>>> list2 = [44,55,66]
>>> list3 = [77,88,99]
>>> map(abc,list1,list2,list3)
[114477, 225588, 336699]
看到并行的效果了吧!在每个list中,取出了下标相同的元素,执行了abc()。


3、如果'function'给出的是‘None’,自动假定一个‘identity’函数(这个‘identity’不知道怎么解释,看例子吧

?
1
2
3
4
5
6
7
8
>>> list1 = [11,22,33]
>>> map(None,list1)
[11, 22, 33]
>>> list1 = [11,22,33]
>>> list2 = [44,55,66]
>>> list3 = [77,88,99]
>>> map(None,list1,list2,list3)
[(11, 44, 77), (22, 55, 88), (33, 66, 99)]
用语言解释好像有点拗口 ,例子应该很容易理解。


介绍到这里应该差不多了吧!不过还有东西可以挖掘:

stackoverflow上有人说可以这样理解map():

?
1
2
3
4
5
map(f, iterable)
基本上等于:
[f(x) for x in iterable]
赶快试一下:


?
1
2
3
4
5
6
7
8
9
>>> def add100(x):
...     return x + 100
...
>>> list1 = [11,22,33]
>>> map(add100,list1)
[101, 102, 103]
>>> [add100(i) for i in list1]
[101, 102, 103]
哦,输出结果一样。原来map()就是列表推导式啊!要是这样想就错了:这里只是表面现象!再来个例子看看:


?
1
2
3
4
5
6
7
8
>>> def abc(a, b, c):
...     return a*10000 + b*100 + c
...
>>> list1 = [11,22,33]
>>> list2 = [44,55,66]
>>> list3 = [77,88,99]
>>> map(abc,list1,list2,list3)
[114477, 225588, 336699]
这个例子我们在上面看过了,若是用列表推导应该怎么写呢?我想是这样的:


?
1
[abc(a,b,c) for a in list1 for b in list2 for c in list3]

但是看到结果,发现根本不是这么回事:

?
1
[114477, 114488, 114499, 115577, 115588, 115599, 116677, 116688, 116699, 224477, 224488, 224499, 225577, 225588, 225599, 226677, 226688, 226699, 334477, 334488, 334499, 335577, 335588, 335599, 336677, 336688, 336699]
这便是上面列表推导的结果。怎么会这么多?当然了列表推导可以这么写:


?
1
2
3
4
5
6
result = []
for a in list1:
    for b in list2:
        for c in list3:
            result.append(abc(abc))
原来如此,若是将三个list看做矩阵的话:
11
22
33
44
55
66
77
88
99

map()只做了列上面的运算,而列表推导(也就是嵌套for循环)做了笛卡尔乘积。

OK,就写到这里。仅个人理解,如有差错请指正,多谢!

上面的例子有些来自于这里:

http://infohost.nmt.edu/tcc/help/pubs/python/web/map-function.html

http://stackoverflow.com/questions/10973766/understanding-the-map-function-python

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

选择与循环:剪刀石头布_Python之石头剪刀布小游戏(史上最详细步骤)

​嗨,各位好呀,我是真小凡。相信你如果是一个刚学习Python的小白,一定会很想做一个自己的Python小游戏(我就是这样子的),那么今天我们就一起实操一下!首先要清楚,做一个项目必须的流…

cometd_CometD:Java Web应用程序的Facebook类似聊天

cometd聊天就像吃一块蛋糕或喝一杯热咖啡一样容易。 您是否曾经考虑过自己开发聊天程序? 您知道,聊天不容易。 但是,如果您是开发人员,并且阅读了本文的最后部分,则可以尝试自行开发一个聊天应用程序,并允许…

常用的C#正则表达式!

"^\d$" //非负整数(正整数 0) "^[0-9]*[1-9][0-9]*$" //正整数 "^((-\d)|(0))$" //非正整数(负整数 0) "^-[0-9]*[1-9][0-9]*$" //负整数 "^-?\d$" //整数 "^\d(\.\d)…

java excel 导出图片_JAVA 使用 POI 导出 EXCEL 自定义背景颜色

开发中常用表格导入和导出 Excel 是常见的功能。在这里分享下使用 POI 导出表格的简单实现&#xff0c;也是为大家提供个思路吧&#xff0c;抛砖引玉&#xff0c;话不多说直接上代码。1、项目引入 maven 依赖<!-- 2、导出表格数据接口RequestMapping3、导出效果如下图以上就…

清北学堂Day 3 游记

爆炸&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 上午&#xff1a;emmmm我今天要争取进前40&#xff08;flag 1&#xff09; 拿到试题&#xff0c;瞬间感受到了zhx长者的恶意......两道方案数题&#xff0c;我要凉了啊。 T1:这是道傻逼题&#xff0c;我20分…

隐马尔可夫模型(HMM)攻略

隐马尔可夫模型 (Hidden Markov Model&#xff0c;HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中&#xff0c;随后在语言识别&#xff0c;自然语言处理以及生物信息等领域体现了很大的价值。平时&#xff0c;经常能接触到涉及 HMM 的相关文章&#xff0c;一…

python中列表,元组,字符串如何互相转换

python中有三个内建函数&#xff1a;列表&#xff0c;元组和字符串&#xff0c;他们之间的互相转换使用三个函数&#xff0c;str(),tuple()和list(),具体示例如下所示: >>> s "xxxxx" >>> list(s) [x, x, x, x, x] >>> tuple(s) (x, x, …

mysql 查看表v空间自增涨_mysql文件结构及InnoDB引擎表空间整理

一、Mysql 的目录结构1、bin目录用于放置一些可执行文件&#xff0c;如mysql.exe、mysqld.exe、mysqlshow.exe等。2、data目录用于放置一些日志文件及数据库3、include目录用于存放一些头文件&#xff0c;如&#xff1a;mysql.h、mysql_ername.h等。4、lib目录用于放置一些库文…

Python随笔-切片

Python为取list部分元素提供了切片操作&#xff0c;list[begin:end]获取list的[begin,end)区间元素。 可以用负数索引。tuple、str都是list的一种&#xff0c;所以也适用。可以用::n抽取间隔为n的元素。可以用于复制list。arr [0, 1, 2, 3, 4, 5] print(arr[1:3]) print(arr[1…

隐马尔可夫模型 HMM 原理及实现

简介 隐马尔可夫模型&#xff08;Hidden Markov Model&#xff0c;HMM&#xff09;创立于20世纪70年代。主要用于行为识别&#xff0c;语音识别&#xff0c;文字识别等。 原理简述 隐马尔可夫模型由五个部分组成&#xff1a;状态空间S&#xff0c;观测空间O&#xff0c;初始状…

python的print

转载:http://www.pythonclub.org/python-basic/print使用print输出各型的 字符串整数浮点数出度及精度控制 strHello Hello Python print strHello #输出结果&#xff1a;Hello Python #直接出字符串1.格式化输出整数python print也支持参数格式化&#xff0c;与C言的printf似…

python适合开发游戏吗_用python能制作游戏吗

展开全部 能&#xff0c;但不适合2113。 用锤子能造5261汽车吗&#xff1f; 谁也没法说不能吧&#xff1f;历史上也确实曾4102经有些汽车&#xff0c;是用锤子造出1653来的。但一般来说&#xff0c;还是用工业机器人更合适对吗&#xff1f; 比较大型的&#xff0c;使用Python的…

method-dispatch/

https://shipilev.net/blog/2015/black-magic-method-dispatch/转载于:https://www.cnblogs.com/WCFGROUP/p/9744045.html

业务的可变性和不可变性分析_不可变性真的意味着线程安全吗?

业务的可变性和不可变性分析我经常阅读有关“如果对象是不可变的&#xff0c;则它是线程安全的”的文章。 实际上&#xff0c;我从未找到过一篇使我相信不可变意味着线程安全的文章。 即使是Brian Goetz的Java Concurrency in Practice一书中关于不变性的一本书&#xff0c;也没…

linux的system () 函数详解

system&#xff08;执行shell 命令&#xff09; 相关函数 fork&#xff0c;execve&#xff0c;waitpid&#xff0c;popen 表头文件 &#xff03;i nclude<stdlib.h> 定义函数 int system(const char * string); 函数说明 system()会调用…

隐马尔科夫模型C#语言算法实现

开发工具&#xff1a; Visual Studio v2010 .NET Framework 4 Client Profile 版本历史&#xff1a; V1.1 2011年06月09日 修正UMDHMM在Baum-Welch算法中存在的模型参数调整错误。 V1.0 2011年06月08日 将C语言实现的隐马尔科夫模型算法&#xff08;UMDHMM&#xff09;改为C#语…

绘制条形图python_小白学Python(13)——pyecharts 绘制 柱状图/条形图 Bar

Bar-基本示例 1 from example.commons importFaker2 from pyecharts importoptions as opts3 from pyecharts.charts importBar4 5 bar(6 Bar()7 .add_xaxis(Faker.choose())8 .add_yaxis("商家A", Faker.values())9 .add_yaxis("商家B", Faker.values())1…

初进JAVA职场面试小技巧:一个老学长的吐血之作!

看着一批批小白的遭遇&#xff0c;有些无奈&#xff0c;又跟我年轻时有些类似。今天正好有点时间&#xff0c;给你几个建议。 1、在结业之前一定要把自己参与过的项目仔细审视一下&#xff0c;一点要特别熟悉项目的流程功能&#xff0c;另外也要重视自己做过的模块&#xff0c;…

阿里云飞天系统的技术架构(转)

阿里云有以下五大优势&#xff1a;中国万网&#xff0c;提供虚拟主机托管的服务&#xff0c;而且还提供域名等服务&#xff0c;其客户群非常庞大。淘宝、阿里巴巴&#xff08;内部称&#xff1a;B2B&#xff09;、支付宝等其他子公司&#xff1a;有大量的数据分析业务&#xff…

Jenkins 流水线 获取git 分支列表_基于Jenkins的DevOps流水线实践

讲师介绍课程寄语我认为Jenkins是对我这些年运维经验的总结&#xff0c;起初我们运维同学都是编写脚本完成一些自动化的操作。而有了Jenkins我们可以将我们的运维经验与Jenkins设计理念融合完成自动化运维平台。全程最佳实践&#xff0c;Pipeline as Code&#xff0c;打通DevOp…