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

高阶函数:map、filter、reduce、sorted底层详解+实战选型

博客导语

高阶函数是Python函数式编程基石,判定标准只有两个:参数接收函数、返回值返回函数。很多开发者只会无脑调用,不懂惰性特性、和推导式的选型边界、底层迭代器返回逻辑。本文全覆盖四大内置高阶函数,附带性能对比、面试问答、替代方案。


一、map 映射函数

1.底层原理

语法:map(func, *iterables),遍历多个可迭代对象,将每个元素传入func处理,**返回惰性迭代器,不占用堆内存**,只有强制转换list/tuple时才会执行计算。支持多序列并行映射,匹配最短序列长度。

# 单序列映射 nums = [1,2,3,4] res = map(lambda x:x**2, nums) print(type(res)) # map迭代器,惰性对象 print(list(res)) # [1,4,9,16] # 双序列并行映射 a = [1,2], b=[10,20] res2 = map(lambda x,y:x+y,a,b) print(list(res2)) # [11,22]

2.选型避坑

简单单元素转换:列表推导式更快;多序列并行转换:优先map,代码更简洁。


二、filter 过滤函数

语法:filter(func, iterable),func返回布尔值,保留返回True的元素;func传入None时,自动过滤所有空值、0、None。同样返回惰性迭代器。

data = [0,1,None,"",22,[],33] # 过滤空值 res = filter(None, data) print(list(res)) # [1,22,33] # 自定义条件过滤偶数 res2 = filter(lambda x:x%2==0, [1,2,3,4])

三、reduce 累积归约函数

位于functools内置库,Python3移出全局命名空间。语法:reduce(func, iter, init=None),func必须接收两个参数,依次累积计算,最终返回单个值,无惰性特性。

from functools import reduce # 列表求和 print(reduce(lambda x,y:x+y,[1,2,3,4])) # 10 # 带初始值:初始值参与第一次计算 print(reduce(lambda x,y:x*y,[2,3],5)) # 30

四、sorted 全局排序函数

区分list.sort():sorted返回全新列表、不修改原数据、支持所有可迭代对象;sort原地修改、仅列表可用。核心参数key(排序依据)、reverse(升降序)。

user = [("李四",24),("张三",20)] # 按年龄升序 new_user = sorted(user,key=lambda x:x[1]) # 按姓名降序 new_user2 = sorted(user,key=lambda x:x[0],reverse=True)

面试高频总结

map/filter惰性节省内存、适合海量数据;reduce适合聚合计算;sorted是开发最高频高阶函数。

http://www.zskr.cn/news/1527571.html

相关文章:

  • PADS转Allegro保姆级避坑指南:从ASC导出到封装处理,一次搞定所有疑难杂症
  • 组织结构不是画出来的,而是为了支撑组织能力而设计出来的
  • 2026年成都员工工装定制市场观察:这几家口碑供应商为何被反复推荐? - 优质品牌商家
  • SAP ABAP开发避坑:用FI_PERIOD_CHECK函数判断日期是否在OB52账期内,别再让程序直接报错
  • 数字钟设计避坑指南:从555振荡器到数码管显示,我的课程设计踩了哪些雷?
  • 2026年泸州龙马潭考公备考规划机构靠谱性分析:本地化服务与实战案例深度解读 - 优质品牌商家
  • Multisim仿真避坑指南:组合逻辑电路功能验证的3个常见错误与解决技巧(以74系列芯片为例)
  • 避坑指南:GEE计算FVC时遇到‘像素超限’和‘分辨率不一致’怎么办?
  • 避坑指南:K210与Arduino串口通信,为什么你的数据总收不到?(附Mega2560多串口配置)
  • NC系统数据权限配置避坑指南:手把手教你搞定元数据过滤与授权规则
  • 【计算机毕业设计案例】基于 SpringBoot 的足球俱乐部人员与物资管理系统的设计与实现 轻量化足球俱乐部综合服务管理系统(程序+文档+讲解+定制)
  • 客户电脑上Keil MDK编译报.axf文件错误?别慌,手把手教你排查‘软件授权’这个坑
  • 从Hive存储格式到Spark资源调优:一份写给大数据新人的秋招技术栈梳理手册
  • 从‘坑’里学QVector:新手常犯的3个内存与迭代器错误及避坑指南
  • 2026年6月成都闪电仓加盟选择指南:聚焦迅购猫品牌优势与市场机遇 - 品牌鉴赏官2026
  • 性能优化:从C++转换到C#的陷阱与解决方案
  • 2026年成都考研培训怎么选?本地6家机构深度评测与真实案例分享 - 优质品牌商家
  • Windows下PyQt5报DLL错误的终极排查:我用Dependencies揪出了C盘里的‘幽灵’Qt库
  • 从EPFL到Idiap:聊聊Sylvain Calinon的学术路径能给机器人领域学生什么启发
  • 2026绵阳装修公司选购指南:从口碑、工艺到售后,三室两厅与旧房改造的真实案例解析 - 优质品牌商家
  • 告别EACCES:一招永久解决Mac上npm全局安装的权限困扰(附npm config get prefix详解)
  • 避坑指南:做城市房价面板回归时,千万别忽略这几点(异方差、内生性检验实操)
  • 2026年船用导缆器品牌选购指南:从选型到应用,深度解析行业主流厂商实力 - 优质品牌商家
  • 2026年现阶段湖南评价高的晚会策划实力公司选型指南 - 品牌鉴赏官2026
  • MySQL连接池配置实战:解决‘last packet‘报错,让你的应用不再断连(附MyBatis完整配置)
  • MiSTER-E多模态情感识别模型架构与优化实践
  • 2026年更新海螺沟推荐的民宿有哪些?万年藏域大酒店给出高原答案 - 品牌鉴赏官2026
  • 避坑指南:SAP BAPI_INCOMINGINVOICE_CREATE调用后,为什么ME23N查不到凭证?
  • JDK17下Hutool解密小程序数据报错?手把手教你两种修复方案(含PKCS5/7差异详解)
  • 51单片机项目避坑指南:NRF24L01无线模块在Proteus仿真与实物调试中的那些差异