当前位置: 首页 > news >正文

Python 中的 Map 和 Reduce 详解

mapreduce是 Python 中函数式编程的核心工具,专门用于批量处理数据聚合计算,代码简洁且高效,是数据处理的常用技巧。

简单一句话区分:

  • map:对每个元素单独做操作(一对一转换)
  • reduce:把所有元素聚合成一个结果(多对一汇总)

一、map:批量处理每个元素

map(function, iterable)

  • 作用:把指定函数应用到可迭代对象(列表、元组等)的每一个元素
  • 返回:一个 map 对象(可转列表、元组等)

1. 基础示例

# 需求:把列表中所有数字 ×2nums=[1,2,3,4]# 定义处理函数defdouble(x):returnx*2# map 批量处理result=map(double,nums)# 转列表查看结果print(list(result))# 输出: [2, 4, 6, 8]

2. 搭配 lambda 简写(最常用)

实际开发中,简单函数直接用lambda,不用单独定义:

nums=[1,2,3,4]result=map(lambdax:x*2,nums)print(list(result))# [2, 4, 6, 8]

3. 处理多个可迭代对象

map可以同时处理多个列表,函数参数数量对应列表数量:

a=[1,2,3]b=[10,20,30]# 对应位置相加result=map(lambdax,y:x+y,a,b)print(list(result))# [11, 22, 33]

二、reduce:聚合所有元素为一个值

reduce(function, iterable[, initializer])

  • 作用:反复用函数处理前两个结果,最终把整个序列合并成一个值
  • 注意:Python3 中reduce不在内置函数里,需要从 functools 导入

1. 基础示例:列表求和

# 必须先导入fromfunctoolsimportreducenums=[1,2,3,4]# 累加函数:a=上一次结果,b=当前元素defadd(a,b):returna+b# reduce 汇总求和total=reduce(add,nums)print(total)# 输出: 1+2+3+4=10

2. 搭配 lambda 简写

fromfunctoolsimportreducenums=[1,2,3,4]total=reduce(lambdaa,b:a+b,nums)print(total)# 10

3. 带初始值的 reduce

指定初始值,会从初始值开始计算:

fromfunctoolsimportreducenums=[1,2,3]# 初始值=10,计算 10+1+2+3total=reduce(lambdaa,b:a+b,nums,10)print(total)# 16

4. 其他常用场景:求最大值

fromfunctoolsimportreducenums=[5,2,9,1]max_num=reduce(lambdaa,b:aifa>belseb,nums)print(max_num)# 9

三、map + reduce 组合使用(经典实战)

先批量处理(map),再汇总结果(reduce),这是大数据处理的基础思想。

示例:先把所有数字平方,再求和

fromfunctoolsimportreducenums=[1,2,3,4]# 1. map:每个数平方 → [1,4,9,16]# 2. reduce:求和 → 1+4+9+16=30result=reduce(lambdaa,b:a+b,map(lambdax:x**2,nums))print(result)# 30

四、快速对比总结

函数作用输入 → 输出特点
map批量转换多个元素 → 同数量元素一对一处理
reduce聚合汇总多个元素 → 单个值多对一汇总

核心记忆口诀

  • map:挨个做,不减少数量
  • reduce:往一起捏,只剩一个值

总结

  1. map用于对序列中每个元素执行相同操作,返回新序列
  2. reduce用于把序列所有元素合并成一个结果,需从functools导入
  3. 两者搭配lambda使用最简洁,是 Python 数据处理的高效写法
  4. 大数据中的MapReduce思想,就来源于这两个基础函数
http://www.jsqmd.com/news/617405/

相关文章:

  • mac安装idea
  • OFA模型与Python集成实战:构建智能图片问答系统
  • 竺桥兄弟店下饭合适吗? - 中媒介
  • 如何选择与学习高质量的软件框架代码
  • 【OpenClaw】通过 Nanobot 源码学习架构---()总体橙
  • c++ breakpad集成 c++如何集成google breakpad进行崩溃上报
  • HTML 页面中精准控制 Chrome 翻译功能的实用技巧
  • 如何轻松下载M3U8视频?N_m3u8DL-CLI-SimpleG完整指南
  • C语言双向循环链表踩坑全记录:从段错误到可运行完整实现
  • STM32裸机开发框架设计与优化实践
  • 5分钟快速上手:XXMI启动器统一游戏模组管理平台完全指南
  • 让你的小龙虾自动去 arXiv 找论文,然后存进 Zotero
  • 聊聊电子汽车衡哪个值得选,维特沃斯性价比高吗 - 工业推荐榜
  • 告别网盘限速烦恼:网盘直链下载工具全攻略
  • 3分钟逃离PDF编译地狱:Windows开发者必备的Poppler工具包终极指南
  • 如何3步搞定暗黑3技能自动化?D3KeyHelper终极配置指南
  • 任能 AB 剂双剂搭配麻烦吗? - 中媒介
  • 《QGIS快速入门与应用基础》270:需求:制作含行政边界、道路、POI的乡镇地图
  • 3分钟学会Windows目录迁移:98%成功率的符号链接技术解析
  • 谈谈智能汽车衡价格,哪个品牌更值得推荐 - mypinpai
  • 2026广州夏令营哪家办学经验丰富/广州夏令营哪家适合中小学生/广州夏令营哪家安全保障高/广州夏令营哪家有短期班:十大标杆营地竞争力分析与选购指南 - 速递信息
  • Windows热键冲突终极解决方案:Hotkey Detective使用完整指南
  • QKeyMapper:Windows上最强大的免费按键映射工具,游戏办公一网打尽!
  • 告别经验主义|腾讯地图+AI智能选址实施方案,让开店选址赢在起点
  • 八大网盘直链下载终极指南:告别限速,轻松获取真实下载地址
  • 2026 精选企业智能部署服务商(最新):知识库部署厂商、AI 知识库方案商、Deepseek 知识库服务商、企业智能 BI 私有化 / 本地部署厂商全覆盖 - 品牌2026
  • 从 Apache SeaTunnel 走向 ASF Member:一位开发者的长期主义样本饶
  • 2026年山东口碑好的温度过程校验仪公司排名,回路过程校验仪价格探讨 - 工业设备
  • R3nzSkin英雄联盟换肤工具:安全易用的游戏外观自定义解决方案
  • 低空经济新蓝海:海事监测无人机技术全解析与应用展望