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

Python中map()函数浅析相关推荐

  1. python中map()函数总结

    ** python中map()函数总结 ** 1.关于map()函数 (1)map函数是python中的一个内置函数,做映射. (2)map()函数返回的是一个新的迭代器对象,不会改变原有对象! 2. ...

  2. python中map()函数无法输出

    目录 1.用法 2.输出 map返回是一个迭代器,需要转换成列表格式才能输出 1.用法 map(function, x) 如一下都是可以正常使用的方法,函数对x中每个元素进行计算 num = map( ...

  3. python中 map函数 的使用

    1. 概念 map函数也是python中的一个内置函数,用法同之前讲过的filter函数类似.map在这里的意思是映射的意思,会根据提供的函数对指定序列做映射. map函数会返回一个迭代器,如果要转换 ...

  4. python中map函数是什么意思_python中map什么意思

    python中map什么意思? python中map() 会根据提供的函数对指定序列做映射. 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 func ...

  5. python中map函数的简单使用

    Map函数的简单使用 map函数中的第一个参数是方法名,第二个参数是可以迭代的对象,第三个位置,第四个-也可以传参数,传进去的也是可迭代的对象,例如列表,字典,元组,字符串.这个函数会依次把可迭代对象 ...

  6. python中map函数字典映射_浅析python中的map函数

    1.map()函数的简介以及语法: map是python内置函数,会根据提供的函数对指定的序列做映射. map()函数的格式是:map(function,iterable,...) 第一个参数接受一个 ...

  7. python中map函数运行原理_Python中map函数的解释和可视化

    先重温一下迭代(Iteration).迭代器对象(iterable).迭代器(iterator )的概念: Iteration是计算机科学的通用术语,它是指对一组元素执行一项操作,一次执行一个元素.一 ...

  8. Python中map()函数用法

    map() 是python的内置函数,会根据提供的函数对指定序列做映射. 对可迭代函数*iterables中的每个元素应用func方法,将结果作为迭代器对象返回. 注意:map()函数返回的是一个新的 ...

  9. map函数python返回值,Python中map函数使用

    图片发自简书App map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. 1.当se ...

最新文章

  1. C# 拖放操作源码详解2
  2. 模拟计算机有声,小年糕有声影集软件电脑版
  3. 牛客小白月赛37【部分题解】
  4. 游戏中的数学与物理学 第二版_在游戏中启蒙幼儿的数学能力和逻辑思维能力...
  5. 【收藏】需求文档(PRD)终极撰写指南
  6. 求整数的位数及各位数字之和(C语言)
  7. 你百分之九十九的问题都是因为懒
  8. ARMv8体系结构基础03:加载和存储指令
  9. Struts(十二):异常处理:exception-mapping元素
  10. Linux内核维护工作流程曝光,程序员必须拜读!
  11. w3school的PHP教程提炼(一)PHP基础
  12. Mysql提权之反弹shell
  13. 计算机枚举法教案,简单枚举算法教案.ppt
  14. 计算机软件工程职业道德论文,软件工程职业道德论文_软件工程_软件工程就业前景...
  15. 全外显子数据分析流程
  16. python 身高预测
  17. Whiten process——数据的白化处理
  18. 介绍.NET Core
  19. 可爱的狮子(lion)
  20. 小红书算法sign php,小红书API签名算法分析

热门文章

  1. java中content啥意思_JSTL标签中的body-content标签体内容输出格式的介绍
  2. 遮掩java_css之图片下方定位遮掩层
  3. linux 关于休眠得脚本,linux – 如果条件为true,请将cron作业休眠5分钟
  4. Excel完成将多行多列数据转化为一列
  5. 如何在网络中成对使用光纤收发器?
  6. 网络监控系统中如何选择工业交换机?
  7. 飞畅科技-PoE交换机的常见问题解答
  8. 基于ZigBee 自组网模块的路灯控制网络
  9. openssh arm linux 编译,openssh编译安装到ARM嵌入式系统中
  10. flutter 返回指定界面_Flutter页面路由导航及传参