鱼C论坛

 找回密码
 立即注册
查看: 6363|回复: 12

[技术交流] 内置函数:map、reduce方法

[复制链接]
发表于 2015-9-14 00:16:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 ~风介~ 于 2017-3-11 00:04 编辑


方法:
  1. |  map(func, *iterables) --> map object
  2. |  
  3. |  Make an iterator that computes the function using arguments from
  4. |  each of the iterables.  Stops when the shortest iterable is exhausted.
复制代码
代码:#Python3.4.0
  1. >>> def f(x):
  2.         return x*x
  3. >>> list(map(f,[1,2,3,4,5,6]))
  4. [1, 4, 9, 16, 25, 36]
  5. >>>
复制代码
-
  1. >>> def ff(x, y):
  2.         return x+y
  3. >>> list(map(ff, [1,2,3], [4,5,6]))
  4. [5, 7, 9]
复制代码

******************************
方法
  1. reduce(...)
  2.     reduce(function, sequence[, initial]) -> value
  3.    
  4.     Apply a function of two arguments cumulatively to the items of a sequence,
  5.     from left to right, so as to reduce the sequence to a single value.
  6.     For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates
  7.     ((((1+2)+3)+4)+5).  If initial is present, it is placed before the items
  8.     of the sequence in the calculation, and serves as a default when the
  9.     sequence is empty.
复制代码
翻译:
  1. reduce函数即为化简,它是这样一个过程:每次迭代,将上一次的迭代结果(第一次时为init的元素,如没有init则为seq的第一个元素)与下一个元素一同执行一个二元的func函数。在reduce函数中,init是可选的,如果使用,则作为第一次迭代的第一个元素使用。
复制代码

图例:
reduce-300x257.png

代码:#Python3.4.0

  1. >>> from functools import reduce
  2. >>> def ad(x,y):
  3.         return x + y
  4. >>> reduce(ad, [1, 3, 5, 7, 9])
  5. 25
  6. >>>ad(ad(ad(ad(1,3),5),7),9)
  7. 25
复制代码
-求阶乘
  1. >>> from functools import reduce
  2. >>> reduce(lambda x, y: x * y, range(1, 5 + 1)) #1*2*3*4*5
  3. 120
  4. >>>reduce(lambda x, y: x * y, range(1, 5 + 1), 2)#2*1*2*3*4*5
  5. 240
复制代码


参考:廖雪峰的官方网站





点评

我很赞同!: 5.0
我很赞同!: 5
我发现这个排版也是很美观~  发表于 2015-12-4 17:14

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
拈花小仙 + 5 + 5 + 3 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-30 06:07:09 | 显示全部楼层
python官方文档  https://docs.python.org/3/library/functools.html?highlight=reduce#functools.reduce

已经解决了,python3需要先调用functools模块,否则会报错 'reduce' 还没有被定义的错误

>>> reduce(lambda x,y:x+y,range(100))
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    reduce(lambda x,y:x+y,range(100))
NameError: name 'reduce' is not defined
>>> import functools
>>> functools.reduce(lambda x,y:x+y,range(100))
4950

评分

参与人数 1荣誉 +3 鱼币 +5 收起 理由
~风介~ + 3 + 5 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-23 08:53:32 From FishC Mobile | 显示全部楼层
云计算传说中的map reduce两大函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-30 05:59:20 | 显示全部楼层
reduce 在Python3里似乎需要先调用一个模块了。模块的名字我搞忘了,不过我刚才直接敲了一遍发现确实报错了


>>>reduce(lambda x,y:x+y,range(100))
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    reduce(lambda x,y:x+y,range(100))
NameError: name 'reduce' is not defined
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-11 19:17:25 | 显示全部楼层
get
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-28 14:51:13 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-7 10:47:36 | 显示全部楼层
map具体可以用来干什么呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-8 17:25:32 | 显示全部楼层
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-16 21:17:07 | 显示全部楼层
其实我不帅 发表于 2016-8-7 10:47
map具体可以用来干什么呢?

我觉得你需要看看Google的论文“MapReduce: Simplified Data Processing on Large Clusters”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-6 17:30:55 | 显示全部楼层
tell me,这块的reduce是什么意思?thank you!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-13 09:54:38 | 显示全部楼层
学习了学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-9 14:22:12 | 显示全部楼层
reduce()还可以接收第3个可选参数initial,作为计算的初始值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 19:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表