Python中map / reduce函数一般在什么情况下使用?
日常没发现有什么特别需要使用的情形,这种函数式语法不用都快要忘掉存在了 ( •̥́ ˍ •̀ू )
Python中map / reduce函数一般在什么情况下使用?
python 不造,js 里 map 一般用来根据一个数组生成一个另外一个数组,reduce 一般用来对数组里的元素做相邻的判断(比如判断连续的两条记录是否重复), 然后生成新的数组。
map和reduce是函数式编程里的两个核心操作,Python内置了它们。
map 用于将一个函数映射到一个序列的所有元素上,并返回一个包含结果的新迭代器。它的典型场景是批量转换数据。比如,你有一个数字列表,想把每个数都平方,用map就比写循环简洁:
nums = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, nums)) # 得到 [1, 4, 9, 16]
reduce(在functools模块里)用于将一个接收两个参数的函数累积地应用到序列上,从左到右,最终把序列“缩减”成一个单一的值。它的典型场景是聚合计算,比如求和、求积、找最大值:
from functools import reduce
nums = [1, 2, 3, 4]
sum_all = reduce(lambda x, y: x + y, nums) # 得到 10
# 相当于 (((1+2)+3)+4)
简单总结:map做一对一的元素转换,reduce做多对一的聚合计算。现在列表推导式和生成器表达式很流行,很多时候[func(x) for x in iter]比map更直观;而像求和直接用sum()更直接。但它们作为函数式编程的思想,在特定场景下(比如处理函数管道或需要惰性求值时)依然很有用。
python 的 layout syntax 使其不支持多行 lambda,严重限制了 map/reduce 的使用
map 太常用了,数组转换。reduce 求和平均数之类很方便。
很常用啊,比如遍历一个字典数组。<br>l = [{'name': 'name', 'age': 10}]<br>for name, age in map(lambda x: (x['name'], x['age']), l):<br> print(name, age)<br>
不过也可以用 List generator 替代,但 map 更高效。
js 里 reduce 有四个参数,叠加值,当前值,索引值,数组自身,这种便利性远超 for。可能一千行代码也没有 for,但是很难没有 forEach map filter sort reduce。
话说回来,我之前比较喜欢用 reduce,因为很方便,20 行的代码 3 行写完,但里面四五个 lambda 上午写的,下午就看不懂了。
确实是会有这个情况,嵌套复杂的函数,写的时候比较费脑筋,过了半年回来自己再看都陌生了。所以,有的时候主管说不太影响效率的情况下,尽量写普通的代码,因为一个人写的代码总不能一直都一个人维护。
pool.map ,简单的并行化
举个例子,我看看读起来会不会有卡顿
太常用了,已经到没有写不下代码的程度了。楼主你可以考虑下其实大部分的 for 循环都可以用 m/r 来替代
python 有列表推导、字典推导式,,所以 map 用的比较少
楼上的你们都用 Python ?这帖子明明是发在 Python 节点啊
Pythonic 的做法就是用 listcomp/dictcomp… 代替 map,我猜这才是楼主提问的原因
只有 9 楼、11 楼说到点上了
补充一点,[hex(x) for x in range(1000)]要比 list(map(hex, range(1000)) 慢
nosql 数据库不支持关联表的时候,必须用这个才能统计关联数据
#12 说的没错,Python 里更多的用的是 listcomp/dictcomp。
map reduce 是个丑陋的东西。除了看别人代码,我不会取管他。
当你觉得需要的时候

