python内置函数map()解惑:将可迭代对象中的每个元素放入指定函数处理
python内置函数map解惑:将可迭代对象中的每个元素放入指定函数处理
- 语法
- 问题
- 回答
- 案例1中
- 案例2中
- 其他补充
反思:以前对map的印象就是转下数据类型,现在发现
map()
是一个高阶函数,其强大之处在于将“做什么”(函数)与“对谁做”(数据)解耦,通过统一的映射规则处理数据,并返回一个支持惰性求值的迭代器(材料来了才工作的流水线)。
语法
语法::
map(function, iterable, ...)
- function:我们指定的函数(或数据类型),可以是python内置的,也可以是自定义的。
- iterable:可迭代的对象,例如列表,元组,字符串等。
- 返回值:返回一个迭代器对象。一般搭配
list()
使用,输出列表
问题
我用python做算法笔试,发现输入经常用到map()
函数,但我对这个函数一知半解,用起来就非常难受。
回答
和同门讨论了一下,通过两个例子加深一下对map()
函数的理解。
# 案例1
# 输入:1 2 3
data = sys.stdin.readline().split() # ["1", "2", "3"]
map_object = map(int, data) # map_object相当于一个写着“把data里的每个元素,用int()函数处理一下”的“订单”
a, b, c = map_object
# 一般可以直接写 a, b, c = map(int, data)# 案例2
list1 = [1,2]
list2 = [3,5,7]
result = list(map(lambda x, y: x+y, list1, list2)) # [4, 7]
案例1中
sys.stdin.readline()
读取输入 "1 2 3\n"
,.split()
默认按空格分割字符串,得到列表 ["1", "2", "3"]
,此时data
就是一个可迭代对象。map(int, data)
创建了一个 map
对象,map()
的功能是依次取出可迭代对象data
中的每一个元素,分别作为int
函数的参数进行处理,再依次输出,但此刻没有任何计算发生。a, b, c = map_object
将map_object
激活,开始从data
从取出第一个元素给int
函数,再把返回的整数1
给a
,依次处理data
中第二个和第三个元素,所以最后a b c
分别是整数1 2 3
。
案例2中
list1
和list2
是两个可迭代对象,lambda x, y: x+y
是一个匿名函数,map()
的功能是依次取出两个可迭代对象中的元素,第一次取list1[0]
和list2[0]
,第二次取list1[1]
和list2[2]
,每次取的两个元素作为函数的参数进行处理,再依次输出,第一次lambda
函数输出4
,第二次lambda
函数输出7
。后面加了一个list
函数,该函数会让map函数开始工作,将两次计算全部完成,result
是[4, 7]
其他补充
简单说一下这里的匿名函数lambda x, y: x+y
,冒号前是函数的形参,冒号后是函数的表达式。