map是一个高阶函数,用于对可迭代对象的每个元素应用指定函数,生成新的惰性求值迭代器,核心功能是在不修改原始数据的前提下,通过函数式编程实现数据转换。
什么是可迭代对象呢,就是任何可以被遍历的对象。那么什么是惰性求值迭代器呢,就是不会一次性计算所有结果,而是在需要的时候才逐个生成结果的迭代器,这种按需计算的特性能节省内存空间,尤其适合处理大量数据或者无限序列的时候。
为什么叫惰性?普通的列表,元组等可迭代对象,会一次性存储所有元素在内存中,比如【1,2,3,4】会同时占用四个元素的内存。但是map()返回的迭代器是惰性的,调用map(函数,可迭代对象)时,它不会立刻执行函数处理所有元素,只是记录了要对哪些元素执行什么函数。
2.语法
map(function,iterable1,iterable2,iterable3,...)
3.使用示例
基础用法(单列表)
nums = [1,2,3,4]
squared = map(lambda x: x**2,nums)
print(list(squared))
这里nums是一个列表,列表是用中括号定义的。map里面的函数是一个匿名函数,返回x的平方。得到的squared就是一个惰性迭代器。
多列表操作
a = [1,2,3]
b= [4,5,6]
product = map(lambda x,y : x*y,a,b)
print(list(product))
lambda x,y : x*y,这是一个匿名函数,作用是接收l参数x和y,并返回他们的乘积。后面的参数是列表a和b,两个可迭代对象。map会依次取出a和b中位置相同的元素,传给lambda函数计算乘积,product是map返回的迭代器,需要转换成列表才能直观看到结果。所以是list(product)。
使用内置函数
words = [“hello”,“world”,“python”]
upper_words = map(str.upper,words)
print(list(upper_words))
这段代码的意思是将列表中所有单词转换为大写形式。
处理不等长可迭代对象
a = [1,2,3,4]
b = [5,6]
result = map(lambda x,y : x + y,a,b)
print(list(result))
这段代码用map()函数对两个不等长的列表a和b进行对应元素求和,map函数的执行逻辑,map(lambda x,u:x+y,a,b)的工作方式是,从两个列表中依次各取出一个元素,传给lambda函数计算求和,直到其中一个列表取完为止。
第 1 次:取 a[0]=1 和 b[0]=5 → 计算 1+5=6;
第 2 次:取 a[1]=2 和 b[1]=6 → 计算 2+6=8;
此时 b 已经没有元素了(b 只有 2 个元素),map 会停止执行,忽略 a 中剩余的元素(3 和 4)。

908

被折叠的 条评论
为什么被折叠?



