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