一步到位:Python map函数完全解析

前言

Python中的高阶函数map(),有着强大的迭代功能。本文从语法和基本使用开始,详细介绍map()函数的实现原理和使用方法,让你轻松实现对序列、列表的操作。

python map函数详解

python中有些内置的高阶函数,如map(),filter(),reduce();之所以称其为高阶函数,因为这类函数接受的参数中有一个参数为函数对象。

map()函数格式:map(func,seq1[,seq2,……])

map函数接收的第一个参数为一个函数对象,后面接收1个或多个序列;map函数会将func作用在后面序列中的各个值上,并返回一个迭代器。

举例:



def func(a):  
    return a**2  
>>>map(func,[1,2,3])  
<map object at 0x000002B127AEA700>#返回一个map对象,为一个迭代器;  
>>>list(map(func1,[1,2,3]))  
[1, 4, 9]#将1,2,3作为参数逐个传入func中,分别得到1,4,9;最后将结果转换为list

也可以传入多个序列,一个序列对应一个函数的参数;序列长度可以不一致,默认取到共同长度的序列值为止;

举例:



def func(a,b):  
    return a+b  
​  
>>>b=list(map(func,[10,20,30],[1,3,10]))#两个序列对应位置的值分别作为a,b作用到func中;  
>>>print(b)  
[11, 23, 40]#  
​  
>>>list(map(func,[10,20,30,40],[1,3,10]))#长度不一致,默认取到长度相同的一段序列  
[11, 23, 40]  
​  
>>>list(map(func,[1,2,3],[10,20,30,40],[1,3,10]))#序列数量必须和func的参数数量一致  
TypeError: func() takes 2 positional arguments but 3 were given  
>>>b=list(map(func,[1,2,3]))  
TypeError: func() missing 1 required positional argument: 'b'  
​

可以看到,map()函数实现的功能和for循环以及列表推导式非常类似,那么map和for循环以及列表推导式的各自效率如何?

举例说明:

  1. map方式实现


import time  
start=time.time()  
def func(a,b):  
    return a+b  
c=list(map(func,range(1000000),range(1000000)))  
end=time.time()  
>>>end-start  
0.16860485076904297
  1. for循环方式实现


import time  
start=time.time()  
c=list()  
for i in range(1000000):  
        c.append(i+i)  
end=time.time()  
>>>end-start  
0.2443540096282959
  1. 列表推导式实现


import time  
a=list(range(1000000))  
b=list(range(1000000))  
start=time.time()  
c=[a[i]+b[i] for i in range(1000000)]  
end=time.time()  
print(end-start)  
​  
0.2124321460723877

从上面对比可以看到,map的效率最高,for循环的效率最低;

基于map的这类功能和效率,在项目开始涉及到较多循环时,均可多考虑能否用Map替代for循环,一方面代码更为简介和pythonic,另一方面代码的时间效率会更高;

总结

Python中的高阶函数map(),通过一行代码就能实现对序列、列表的操作,让你的代码更简洁高效!快来尝试吧!

添加新评论