当前位置: 首页 > 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.jsqmd.com/news/1015752/

相关文章:

  • 2025_NIPS_Large Language Models can Implement Policy Iteration
  • 别再只会kubectl delete了!深入理解K8s Finalizer和Webhook,彻底解决Namespace Terminating问题
  • 2026年成都员工工装定制市场观察:这几家口碑供应商为何被反复推荐? - 优质品牌商家
  • 普冉PY32F0驱动1602LCD避坑指南:3.3V和5V供电混用导致屏幕不亮的排查与解决
  • ESP8266连接Blinker避坑指南:Wi-Fi配不上、密钥报错?看这篇就够了
  • Cadence OrCAD新手避坑指南:从DRC检查到Annotate重排,搞定网表导出全流程
  • PADS转Allegro保姆级避坑指南:从ASC导出到封装处理,一次搞定所有疑难杂症
  • 组织结构不是画出来的,而是为了支撑组织能力而设计出来的
  • SAP ABAP开发避坑:用FI_PERIOD_CHECK函数判断日期是否在OB52账期内,别再让程序直接报错
  • FPGA新手避坑指南:Vivado MIG IP核调用DDR3时,AXI接口这5个信号最易出错
  • 数字钟设计避坑指南:从555振荡器到数码管显示,我的课程设计踩了哪些雷?
  • Multisim仿真避坑指南:组合逻辑电路功能验证的3个常见错误与解决技巧(以74系列芯片为例)
  • Scratch列表排序避坑指南:蓝桥杯考过的‘移动’和‘删除’操作,你真的做对了吗?
  • 别再被‘Unsafe Login’卡住了!手把手教你用JavaMail+IMAP ID搞定163邮箱连接
  • CF2232A题解
  • 基于 Simulink 的 LLC 谐振变换器在宽电压输入范围内的增益特性仿真实战教程。
  • 避坑指南:GEE计算FVC时遇到‘像素超限’和‘分辨率不一致’怎么办?
  • 2026年泸州龙马潭考公备考规划机构靠谱性分析:本地化服务与实战案例深度解读 - 优质品牌商家
  • 保姆级教程:用示波器和CAN分析仪诊断并解决CAN总线Bus Off故障
  • 你的MOT模型评测准吗?忽略VisDrone/UAVDT的ignore region和截断标注会让MOTA暴跌!
  • YOLO环境配置翻车实录:从‘-U’误操作到CUDA版本不匹配,我踩过的坑你别再踩了
  • 避坑指南:K210与Arduino串口通信,为什么你的数据总收不到?(附Mega2560多串口配置)
  • 避坑指南:用频谱分析仪调试MC1496混频电路时,如何准确设置扫频范围和分辨率带宽?
  • 2026成都婚庆策划公司怎么选?资深行业编辑实测8家口碑机构,附电话与避坑指南 - 优质品牌商家
  • NC系统数据权限配置避坑指南:手把手教你搞定元数据过滤与授权规则
  • 避坑指南:Proteus8仿真AT89C51串口通信,你的数码管为啥不亮?
  • 【计算机毕业设计案例】基于 SpringBoot 的足球俱乐部人员与物资管理系统的设计与实现 轻量化足球俱乐部综合服务管理系统(程序+文档+讲解+定制)
  • 2026年现阶段晋城钢结构二次深化设计生产厂家哪家可靠:从技术实力到区域服务深度解析 - 品牌鉴赏官2026
  • 离网可再生能源制氢系统的频率稳定优化策略
  • 告别玄学调优:给IntelliJ IDEA分配6G内存后还卡?试试开启Metal渲染和新UI(附2023.3版配置截图)