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

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.xdnf.cn/news/17803.html

相关文章:

  • Android UI(一)登录注册 - Compose
  • 【数据可视化-89】基孔肯雅热病例数据分析与可视化:Python + pyecharts洞察疫情动态
  • RH134 管理基本存储知识点
  • 【C#补全计划】泛型约束
  • OpenCv(二)——边界填充、阈值处理
  • 37 C++ STL模板库6-string_view
  • Mybatis实现页面增删改查
  • 解锁AI潜能:五步写出让大模型神级指令
  • C#面试题及详细答案120道(01-10)-- 基础语法与数据类型
  • 《嵌入式 C 语言编码规范个人笔记》参考华为C语言规范标准
  • 机器学习-支持向量机器(SVM)
  • CPP模板编程
  • Python学习-----3.基础语法(2)
  • 广义矩估计随机近似中1.2和2.1的差异
  • 如何手动开启 Hyper-V?Windows 10/11 详细开启教程
  • Mybatis 源码解读-Plugin插件源码
  • 系统设计——DDD领域模型驱动实践
  • 如何写出更清晰易读的布尔逻辑判断?
  • 码上爬第九题【协程+webpack】
  • rustdesk 开源遥控软件
  • Wireshark中捕获的大量UDP数据
  • C# 结构体与类的区别是什么?
  • 【论文阅读 | CVPR 2024 | UniRGB-IR:通过适配器调优实现可见光-红外语义任务的统一框架】
  • C++ 23种设计模式的分类总结
  • 软件著作权产生与登记关键点
  • PiscTrace基于YOLO追踪算法的物体速度检测系统详解
  • openvsx搭建私有插件仓库
  • mysql查询中的filesort是指什么
  • 云蝠智能 VoiceAgent:重构物流售后场景的智能化引擎
  • 构建Node.js单可执行应用(SEA)的方法