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

Python 内置函数原理解析:map, filter, zip, enumerate

Python 内置函数是 Python 编程中最常用的工具之一,它们不仅简化了代码书写,还往往比手动循环更高效。本篇文章将深入解析 mapfilterzipenumerate 四个常用内置函数的底层原理和使用方法。


1. map 函数

功能

map 用于将一个函数作用到可迭代对象的每个元素上,并返回一个 迭代器

基本语法

map(function, iterable, ...)
  • function:要应用的函数

  • iterable:可迭代对象,可以有多个

  • 返回值:map 对象(迭代器)

示例

nums = [1, 2, 3, 4]
squared = map(lambda x: x**2, nums)
print(list(squared))  # [1, 4, 9, 16]

多个可迭代对象

nums1 = [1, 2, 3]
nums2 = [4, 5, 6]
summed = map(lambda x, y: x + y, nums1, nums2)
print(list(summed))  # [5, 7, 9]

底层原理

  • map 返回的是 迭代器对象,不会立即计算元素,按需生成(惰性计算)。

  • Python 内部使用 C 语言实现 map 对象的迭代器协议,遍历时调用传入函数并返回结果。

  • 相比手动循环,map 避免了临时列表开销,尤其在处理大数据时效率更高。


2. filter 函数

功能

filter 用于从可迭代对象中过滤出满足条件的元素。

基本语法

filter(function, iterable)
  • function:返回布尔值的函数

  • iterable:可迭代对象

  • 返回值:filter 对象(迭代器)

示例

nums = [1, 2, 3, 4, 5]
even_nums = filter(lambda x: x % 2 == 0, nums)
print(list(even_nums))  # [2, 4]

底层原理

  • filter 返回 迭代器,也是惰性求值。

  • 遍历时调用函数判断元素是否符合条件,只有返回 True 的元素才会被生成。

  • 内部实现是通过迭代器协议封装的 C 语言对象,因此性能优于手动循环过滤。


3. zip 函数

功能

zip 用于将多个可迭代对象“压缩”在一起,生成一个元组序列,每个元组包含各个可迭代对象对应位置的元素。

基本语法

zip(*iterables)
  • *iterables:可迭代对象

  • 返回值:zip 对象(迭代器)

示例

names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 78]
zipped = zip(names, scores)
print(list(zipped))  # [('Alice', 85), ('Bob', 90), ('Charlie', 78)]

底层原理

  • 返回 迭代器,惰性生成元组。

  • 遍历时内部同时从每个可迭代对象取一个元素,直到最短序列耗尽。

  • Python 内部使用 C 语言实现迭代器协议,按需生成结果,避免创建中间列表。


4. enumerate 函数

功能

enumerate 用于将可迭代对象组合为索引序列,同时返回元素的索引和值。

基本语法

enumerate(iterable, start=0)
  • iterable:可迭代对象

  • start:索引起始值(默认 0)

  • 返回值:enumerate 对象(迭代器)

示例

fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits, start=1):print(index, fruit)
# 输出:
# 1 apple
# 2 banana
# 3 cherry

底层原理

  • enumerate 返回 迭代器对象

  • 遍历时内部维护一个计数器,每次取元素时返回 (index, value)

  • 同样采用惰性求值,性能优于手动维护计数变量。


总结与比较

函数返回值类型特点
map迭代器将函数应用到每个元素
filter迭代器按条件筛选元素
zip迭代器多序列并行压缩成元组
enumerate迭代器返回索引和值的元组

核心思想

  • 四个函数都返回 迭代器,实现惰性计算,节省内存。

  • 内部实现依赖 C 语言迭代器协议,效率高。

  • 可以与列表推导式、生成器表达式结合使用,写出简洁高效代码。

http://www.dtcms.com/a/574747.html

相关文章:

  • wordpress 删除用户安卓优化大师老版本下载
  • 外贸网站建站案例网站建设5000费用
  • 【城市热岛效应识别】二维高斯模型拟合 UHI
  • 网站优化试卷网站备案核
  • 万网网站备份公共货运平台
  • Linux开发-->驱动开发-->字符设备驱动框架
  • 广州网站建设哪家公司承德网站制作公司优选网十科技
  • 一小时做网站做下载类网站前景
  • 【28】OpenCV C++实战篇——统计每个通道像素值的数量,统计R/G/B通道内像素值在某范围内的 总数
  • 江门市网站建设公司emlog to wordpress
  • 网站建设及优化方案苏州宿迁工业园区
  • 一键将指定文件夹内所有文件设置为只读/取消只读
  • linux: centos 软件包管理 yum源
  • 图像显示框架五——SurfaceFlinger的启动流程(基于Android 15源码分析)
  • 多线程之线程本地存储(Thread-Local Storage)
  • 基础数据结构之哈希表:两数之和(LeetCode 1 简单题)
  • 大公司网站建设建网站网站关键词书写步骤
  • 临沂网站建设优化网站开发业务规划
  • “移动政务”业务门户安全解决方案
  • 视频号网页版怎么发布视频优化网络的软件
  • 网站建设销售技巧和话术百度号码认证
  • 用什么软件快速做网站wordpress文章链接插件
  • 游戏网站建设杭州网站开发运营成本
  • 数字沙盘鹰眼导航电子沙盘:主副地图实时协同交互
  • 操作系统原理--进程线程
  • AI 空间细胞表型分析赋能肺癌诊疗:从 “看大小” 到 “看邻里”,精准分层风险
  • 个人网站开发的现状高德能看国外地图吗
  • 【StringJoiner 、StringBuilder、StringBuffer 功能解读】
  • 中国建设网站简州新城土地整改项目网站内容发布平台源码
  • 天津网站推广外包快看点自媒体平台注册入口和下载