V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
iConnect
V2EX  ›  Python

map / reduce 一般在什么情况下使用?

  •  
  •   iConnect · 2017-07-14 18:51:46 +08:00 · 3011 次点击
    这是一个创建于 2448 天前的主题,其中的信息可能已经有所发展或是发生改变。
    日常没发现有什么特别需要使用的情形,这种函数式语法不用都快要忘掉存在了 ( •̥́ ˍ •̀ू )
    15 条回复    2017-07-16 13:40:54 +08:00
    caniuse
        1
    caniuse  
       2017-07-14 19:05:43 +08:00
    python 不造,js 里 map 一般用来根据一个数组生成一个另外一个数组,reduce 一般用来对数组里的元素做相邻的判断(比如判断连续的两条记录是否重复), 然后生成新的数组。
    halfcoder
        2
    halfcoder  
       2017-07-14 19:14:30 +08:00
    python 的 layout syntax 使其不支持多行 lambda,严重限制了 map/reduce 的使用
    mooncakejs
        3
    mooncakejs  
       2017-07-14 19:20:41 +08:00
    map 太常用了,数组转换。reduce 求和平均数之类很方便。
    TJT
        4
    TJT  
       2017-07-14 22:14:29 +08:00
    很常用啊,比如遍历一个字典数组。

    ```
    l = [{'name': 'name', 'age': 10}]
    for name, age in map(lambda x: (x['name'], x['age']), l):
    print(name, age)
    ```

    不过也可以用 List generator 替代,但 map 更高效。
    autoxbc
        5
    autoxbc  
       2017-07-14 22:30:43 +08:00
    js 里 reduce 有四个参数,叠加值,当前值,索引值,数组自身,这种便利性远超 for。可能一千行代码也没有 for,但是很难没有 forEach map filter sort reduce。
    v2dead
        6
    v2dead  
       2017-07-14 22:53:05 +08:00 via Android   ❤️ 1
    话说回来,我之前比较喜欢用 reduce,因为很方便,20 行的代码 3 行写完,但里面四五个 lambda 上午写的,下午就看不懂了。
    iConnect
        7
    iConnect  
    OP
       2017-07-14 23:15:30 +08:00
    @v2dead 确实是会有这个情况,嵌套复杂的函数,写的时候比较费脑筋,过了半年回来自己再看都陌生了。所以,有的时候主管说不太影响效率的情况下,尽量写普通的代码,因为一个人写的代码总不能一直都一个人维护。
    crazycabbage
        8
    crazycabbage  
       2017-07-14 23:17:05 +08:00 via Android
    pool.map ,简单的并行化
    sagaxu
        9
    sagaxu  
       2017-07-14 23:20:57 +08:00 via Android
    @v2dead 举个例子,我看看读起来会不会有卡顿
    ch3rub1m
        10
    ch3rub1m  
       2017-07-14 23:33:21 +08:00 via iPhone
    太常用了,已经到没有写不下代码的程度了。楼主你可以考虑下其实大部分的 for 循环都可以用 m/r 来替代
    XIVN1987
        11
    XIVN1987  
       2017-07-14 23:47:16 +08:00
    python 有列表推导、字典推导式,,所以 map 用的比较少
    congeec
        12
    congeec  
       2017-07-15 02:33:55 +08:00   ❤️ 1
    楼上的你们都用 Python ?这帖子明明是发在 Python 节点啊
    Pythonic 的做法就是用 listcomp/dictcomp... 代替 map,我猜这才是楼主提问的原因
    只有 9 楼、11 楼说到点上了

    补充一点,[hex(x) for x in range(1000)]要比 list(map(hex, range(1000)) 慢
    winglight2016
        13
    winglight2016  
       2017-07-15 12:59:28 +08:00
    nosql 数据库不支持关联表的时候,必须用这个才能统计关联数据
    ivechan
        14
    ivechan  
       2017-07-16 13:33:55 +08:00
    #12 说的没错,Python 里更多的用的是 listcomp/dictcomp。
    map reduce 是个丑陋的东西。除了看别人代码,我不会取管他。
    romanticbao
        15
    romanticbao  
       2017-07-16 13:40:54 +08:00
    当你觉得需要的时候
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3940 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 10:24 · PVG 18:24 · LAX 03:24 · JFK 06:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.