别再硬套for循环!Python这4个函数专治数据处理
刚开始学习的那个时候, 一旦手里拿到了一串数据, 我的条件反射便是去写一个for循环, 并且在这个for循环里面还需要加上几个if语句, 吭哧吭哧地写上十几行代码才能够把活给干完。后来才了解到, 其实早就在内置函数里给我们准备好了“数据处理四件套”——map、、、。同样的一个需求, 可是别人仅仅用两行代码就能够搞定, 而我写了二十行代码, 纯粹属于费力不不讨好、毫无成效却又毫无益处地做了这件事。今儿就把这四件套一回讲明白。你只需记着一个景象: 把数据设想成流水生产线上的一批货物, 四个函数便是四个各异的“车间”。第一个车间map批量加工厂map所做之事极为纯粹, 针对一组数据当中的每一个单独元素, 进行共同且一致的同一道加工处理, 随后吐露出一组崭新的数据。最为奇妙的是, 它仅仅操作“出厂件”, 绝不触碰你的“原件”。nums [10, 20, 30, 40] result list(map(lambda x: x * 2, nums)) print(result) # [20, 40, 60, 80] print(nums) # [10, 20, 30, 40] 原件一点没变这儿, x 乘以 2 的这种情况便是那道所谓的“加工工序” , map 会将 nums 里面的每一个数, 逐个送去进行这道工序, 10 会变为 20, 20 会变为 40 , 按这样的方式依次变化, 最终整工整齐地交还给你一组全新的数。两个坑新手必踩1. 返回, map生成而是为并非列表所谓迭代器样式之物。直接以print实施操作之时将目睹莫名内存地址呈现情况出现。若愿望查看其中内容, 需记得运用list()进行包裹处理, 或者规规矩矩借助for循环予以遍历方可达成目的。2. 迭代器十分“娇气”, 一旦遍历或者进行 list 转换一回便会用完, 当第二次再进行转换时就会成为空列表。因而要么尽早运用 list() 将结果存入变量, 要么从一开始直接采用 list(map(...)) 一步达成。第二个车间质检筛子承担“挑货”职责: 把一组数据当中合乎条件的筛选找出来, 将不符合心意的舍弃掉。最经典的例子从一堆人里挑出成年人persons [ {name: 张三, age: 15}, {name: 李四, age: 16}, {name: 王五, age: 17}, {name: 李华, age: 18}, {name: 赵六, age: 19}, {name: 孙七, age: 20}, ] adults list(filter(lambda p: p[age] 18, persons)) print(adults) # 只剩李华、赵六、孙七留意, 所书写的是p 18, 并非p 18。p乃是整本“人事档案”字典, 你需要先掀翻档案拿出age这一栏而后再去比较大小, 径直拿整本字典比较必定会报错。另外存在一个偷懒的神奇技巧, 当第一个参数直接传递None时, 它能够自动将“假值”全部筛选掉。data [0, 1, , Hello, [], (), 5] print(list(filter(None, data))) # [1, Hello, 5]0、空着的字符串, 空着的列表, 空着的元组, 转变成布尔值的时候, 都是呈现为False, 会自动被舍弃掉其余的那些具有真值的内容, 全部都留存下来。在清理不干净的数据时, 运用这样的办法, 会格外让人觉得畅快。map以及它和都返回迭代器, 它俩都存在着可能“使用一次就会被耗尽”这种情况而它们之间的区别在于——map不会改变元素数量然而, 却有可能会把数量筛选少。记住这单独的一个要点, 能够减少半小时的调试时间。第三个车间重新排队负责进行排序 并且 它跟前面的那两个存在差异 直接返回的是一个列表 不需要你再次通过list()进行转换 拿到之后就能够直接使用。names [python, go, java] print(sorted(names, keylen)) # [go, java, python] print(sorted(names, keylen, reverseTrue)) # [python, java, go]按字符编码进行的默认排序, 是这样排的由于此原因, go 处于最前面, 然而当添加了 keylen 后, 就转变为按照字符串长度来进行排序。参数 key 所具备的能力, 便是能够让你去指定按照何种方式进行排序。排序字典列表也靠它。比如按年龄给一群人排队print(sorted(persons, keylambda p: p[age])) # 想要从大到小加个 reverseTrue 就行特意提及两位亲戚, max以及min同样能够运用key, 想要寻觅年龄处于最大状态或者最小状态的那个人。print(max(persons, keylambda p: p[age])) # 李华20岁 print(min(persons, keylambda p: p[age])) # 张三15岁单独的一句话, 一旦是涉及到了比大小、挑极值、排顺序这些方面, 那么首先就要去想 / max / min 以及加上 key。第四个车间打包机之前的三个均是“一对多”或者“多对多”这种情况, 与之相反采取这样的做法——把那一堆的数据如同滚雪球一般进行合并, 最终形成一个结果。在生活当中它就类似于把那些散装的零件逐个放进同一个箱子里面, 最后仅仅交给你一个箱子。它比较特殊不能直接用得先从 模块请过来from functools import reduce nums [1, 2, 3, 4, 5] total reduce(lambda a, b: a b, nums) print(total) # 15它这样运行, 逻辑是, 首先抓取前面的两个数, 也就是1和2, 将它们相加而得到3, 接着要把3跟下一个数3相加从而得到6, 之后6再加上4得出10, 然后10加上5得到15。每一回的“和”都会转变成为下一轮的a, 新进来的元素当作b, 一直到队伍全部走完。你还能传第三个参数当初始值print(reduce(lambda a, b: a b, nums, 10)) # 25这回搞的头一遭计算的是十加上一, 这等同于预先朝着箱子里头放置了一件垫底的货物。若进行换行操作, 便可将加号修改成乘号, 随即就会变成求乘积的情况要是将数字替换为字符串, 那就会成为拼接的情形。words [ab, cd, ef] print(reduce(lambda a, b: a b, words)) # abcdef记好了, 给你交予的那个合并函数, 始终都仅仅能够收纳两个参数a以及b, 再多写上哪怕一个, 也不会有人给你去传递的, 直接就会出现报错情况。千万别存有贪心的想法哟。四件套合体记住这张表回头看它们其实对应了数据处理的四种本能动作• 要统一加工 → map• 要挑三拣四 →• 要排排坐 →• 要合并汇总 →又一次拿到那一堆杂乱无章的数据时, 先别急着去写for循环。在心里先过一遍, 我究竟是要进行加工, 还是要进行筛选, 亦或是要进行排序, 又或者是要进行合并呢? 指向对准车间, 将数据送进去, 代码变短了, 思路也变得清爽了。与“返回的‘迭代器’”相关联的“map”究竟是什么东西? 为何那“用一次就没了”呢? 下一篇咱们专门去拆解它。要是觉得有用那就先点个赞收藏起来, 等用到的时候把其翻找出来便可以了。

相关新闻

Qt界面切换核心方案:QStackedWidget与QDialog实战指南

Qt界面切换核心方案:QStackedWidget与QDialog实战指南

前阵子带一个新人用Qt做桌面工具,他卡在“从一个界面跳到另一个界面”这个需求上好几天。一开始他打算直接new一个QWidget出来show,结果窗口弹得到处都是,切来切去连自己都找不着页面。这个场景在Qt入门阶段太典型了:界面多了&…

2026/9/13 17:36:13 阅读更多 →
DolphinScheduler 任务全卡死:点了「停止」,200+ 任务再没动过

DolphinScheduler 任务全卡死:点了「停止」,200+ 任务再没动过

📝 摘要:重启 DolphinScheduler 后 200 补数任务把刚恢复的 ClickHouse 再次打挂,串行等待的队伍随之全锁死。而点那下「停止」才是致命一击:队首本已是「失败」这个终态,被推回「准备停止」这个非终态,唤醒…

2026/9/13 17:36:13 阅读更多 →
高效PPT制作:5类必备模板工具与实用技巧

高效PPT制作:5类必备模板工具与实用技巧

1. 为什么我们需要PPT模板工具?做PPT这件事,估计是每个职场人的噩梦。明明内容都准备好了,却要花大把时间在排版设计上。我见过太多同事为了调一个色块的位置折腾半小时,也见过不少人在deadline前熬夜改格式。其实PPT制作完全可以…

2026/9/13 17:36:13 阅读更多 →

最新新闻

工控入门到进阶全路线:从电气基础到PLC编程与自动化实战

工控入门到进阶全路线:从电气基础到PLC编程与自动化实战

老有人来问我:想做工控,到底该从哪下手?是不是先啃PLC?要不要把模电数电学一遍?考哪些证书管用?问的人多了,我发现大家其实是被工控这行的“知识面太杂”吓住了。工控入门并不难,难的…

2026/9/13 18:29:36 阅读更多 →
FunASR ONNX Runtime 运行时中的 gflags 依赖:二进制安装、CMake 构建与集成实践

FunASR ONNX Runtime 运行时中的 gflags 依赖:二进制安装、CMake 构建与集成实践

FunASR ONNX Runtime 运行时中的 gflags 依赖:二进制安装、CMake 构建与集成实践 【免费下载链接】FunASR Open-source speech recognition toolkit for training, inference, streaming ASR, VAD, punctuation, speaker diarization pipelines, and OpenAI-compati…

2026/9/13 18:29:36 阅读更多 →
FunASR 运行时:自行生成 SSL 证书并启用 WSS 加密的流式语音识别服务

FunASR 运行时:自行生成 SSL 证书并启用 WSS 加密的流式语音识别服务

FunASR 运行时:自行生成 SSL 证书并启用 WSS 加密的流式语音识别服务 【免费下载链接】FunASR Open-source speech recognition toolkit for training, inference, streaming ASR, VAD, punctuation, speaker diarization pipelines, and OpenAI-compatible/MCP ser…

2026/9/13 18:29:36 阅读更多 →
Zulip 的 Slack 兼容 Incoming Webhook:从 Slack 迁移集成的零改造接入方案

Zulip 的 Slack 兼容 Incoming Webhook:从 Slack 迁移集成的零改造接入方案

Zulip 的 Slack 兼容 Incoming Webhook:从 Slack 迁移集成的零改造接入方案 【免费下载链接】zulip Zulip server and web application. Open-source team chat that helps teams stay productive and focused. 项目地址: https://gitcode.com/GitHub_Trending/zu…

2026/9/13 18:29:36 阅读更多 →
蓝桥杯Python字符串处理与F串问题解析

蓝桥杯Python字符串处理与F串问题解析

1. 蓝桥杯Python研究生组赛题解析背景作为一名参加过多次蓝桥杯赛事并担任过校队指导的选手,我深知研究生组题目的独特挑战性。第十六届省赛的F串问题看似简单,实则暗藏玄机,非常考验选手对Python字符串处理的深入理解和算法优化能力。蓝桥杯…

2026/9/13 18:29:36 阅读更多 →
react-email editor 文本对齐修复深度解析:Left 按钮激活态、显式对齐持久化与祖先继承解析

react-email editor 文本对齐修复深度解析:Left 按钮激活态、显式对齐持久化与祖先继承解析

react-email editor 文本对齐修复深度解析:Left 按钮激活态、显式对齐持久化与祖先继承解析 【免费下载链接】react-email 💌 Build and send emails using React 项目地址: https://gitcode.com/GitHub_Trending/re/react-email 导读 react-ema…

2026/9/13 18:28:36 阅读更多 →

日新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/13 16:51:11 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/12 18:29:34 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/12 19:02:44 阅读更多 →