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

python中的map函数

目录

初识map函数

什么是map函数

map函数的定义

map函数的原理

map函数的运用

常见试题类型

对单个列表进行处理

同时处理多个列表

搭配内置函数

对字符串进行映射

map函数与for循环的对比


 

初识map函数

什么是map函数

map函数是Python的一个内置高阶函数,用来对可迭代对象(如列表、元组、集合等)中的每个元素依次应用某个函数,并返回一个map对象(迭代器),需要用list、tuple等函数进行元素数据类型转换才能看到结果。

map函数的定义

语法结构:

map(function, iterable)

function:函数对象,用于处理每个元素,可以是自定义函数、内置函数或lambda匿名函数。

iterable:可迭代对象,可以有多个(比如列表 (list)、元组 (tuple)、set集合 ()、字符串 (str)、字典的键/值/项)。

map函数的原理

  • map函数依次从iterable中取出元素。

  • 把取出的元素传入function,得到结果。

  • 继续处理下一个元素,直到可迭代对象被遍历完。

  • 返回一个惰性迭代器(不会立刻计算所有结果),需要用list、tuple等函数转换才能看到所有值。

map函数的运用

常见试题类型

对单个列表进行处理

例如,小小勇者在村口发现了一片果园,里面的苹果编号从 1 到 4。村长交给他一个魔法——“甜化术”,能让苹果甜度变为编号的平方。如果一个个去施法很慢,但map函数可以一次对所有苹果施法。

# 苹果编号
apples = [1, 2, 3, 4]
# 使用map函数批量处理
sweetness = map(lambda x: x ** 2, apples)
# 需要的时候再取出结果
print(list(sweetness))

对代码进行运行测试:

同时处理多个列表

例如,勇者接到“面包坊”的订单——制作 3 份面团。他手上有一袋“面粉重量表”:

[100, 200, 300]

和一袋“水重量表”:

[50, 60, 70]

需要按一一对应的重量混合。map函数就像是“合成术”,让每份面粉和水自动合并成面团重量。

# 面粉重量
flour = [100, 200, 300]
# 水重量
water = [50, 60, 70]
# 使用map函数进行合成处理
dough = map(lambda f, w: f + w, flour, water)
print(list(dough))

对代码进行运行测试:

搭配内置函数

例如,勇者在魔法书库找到三卷古老卷轴:fireball、heal、shield。他想知道这些卷轴咒语的长度,以便计算学习所需的时间。不用自己数,map函数搭配len函数,就能直接批量得出结果。

scrolls = ["fireball", "heal", "shield"]
# 批量计算咒语长度
lengths = map(len, scrolls)
print(list(lengths))

对代码进行运行测试:

对字符串进行映射

例如,勇者的伙伴们各自戴着名字牌,名字是小写的(a, b, c)。为了在城堡晚宴上更正式,他们决定把名字牌全部改成大写。勇者用 map() 配合 str.upper,一口气完成了改造。

names = ['a', 'b', 'c']
# 批量改成大写
upper_names = map(str.upper, names)
print(list(upper_names))

对代码进行运行测试:

map函数与for循环的对比

特点map函数for循环
写法简洁,结合lambda很紧凑更直观
返回值惰性迭代器直接处理列表
速度对大数据更高效数据小差异不大
可读性初学者可能觉得陌生容易理解

例如,勇者要把战利品的价值提升到原来的平方值。如果用普通的 for 循环,他得一个个施法;如果用 map(),他能一口气对所有战利品施法,节省很多时间。

treasures = [1, 2, 3]
# for 循环施法
res1 = []
for t in treasures:res1.append(t ** 2)# map 魔法施法
res2 = list(map(lambda t: t ** 2, treasures))print(f'for循环的运行结果:{res1}')
print(f'map函数的运行结果:{res2}')

对代码进行运行测试:

两种方法结果相同,但map函数写法更简洁,尤其在数据量大时更高效。

http://www.lryc.cn/news/620619.html

相关文章:

  • 初识c语言————缓冲区字符滞留
  • 计算机视觉(opencv)实战三——图像运算、cv2.add()、cv2.addWeighted()
  • 疏老师-python训练营-Day45Tensorboard使用介绍
  • Effective C++ 条款40:明智而审慎地使用多重继承
  • 给植物浇水
  • 计算机视觉CS231n学习(8)
  • 飞算 JavaAI 云原生实践:基于 Docker 与 K8s 的自动化部署架构解析
  • 水印消失术!JavaAI深度学习去水印技术深度剖析
  • Product Hunt 每日热榜 | 2025-08-14
  • wpf 保姆级实现visual studio里面的属性窗口 深度解析属性网格(PropertyGrid)实现原理与高级定制
  • NineData云原生智能数据管理平台新功能发布|2025年7月版
  • DOCKER设置日志轮转
  • 爬虫逆向之滑块验证码加密分析(轨迹和坐标)
  • Redis 03 redis 缓存异常
  • 嵌入式学习笔记--MCU阶段--DAY12实时操作系统rt_thread1
  • C语言零基础第16讲:内存函数
  • 华为实验WLAN 基础配置随练
  • 【奔跑吧!Linux 内核(第二版)】第6章:简单的字符设备驱动(三)
  • 使用AI编程自动实现自动化操作
  • 考研408《计算机组成原理》复习笔记,第三章(6)——Cache(超级重点!!!)
  • [免费]基于Python的影视数据可视化分析系统(Flask+echarts)【论文+源码+SQL脚本】
  • 财务自动化软件敏感数据泄露风险评估与防护措施
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘arviz’问题
  • Flutter 顶部导航标签组件Tab + TabBar + TabController
  • Polyak-Ruppert 平均
  • 第四天~什么是ARXML?
  • Eureka故障处理大汇总
  • Java研学-RabbitMQ(八)
  • 李沐-第六章-LeNet训练中的pycharm jupyter-notebook Animator类的显示问题
  • 【LeetCode 热题 100】295. 数据流的中位数——最大堆和最小堆