关于python:python-map函数详解

43次阅读

共计 1409 个字符,预计需要花费 4 分钟才能阅读完成。

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,另一方面代码的工夫效率会更高;

正文完
 0