python中的map函数

发布于:2025-08-15 ⋅ 阅读:(11) ⋅ 点赞:(0)

目录

初识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函数写法更简洁,尤其在数据量大时更高效。


网站公告

今日签到

点亮在社区的每一天
去签到