python map函数详解

虞松
• 阅读 12308

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

点赞
收藏
评论区
推荐文章
Symbol卢 Symbol卢
4年前
js数组的遍历
js中数组的遍历1\.Map()方法Map映射的意思,可以看做是一个映射函数,所谓的映射。一个萝卜一个坑,一一对应的关系;语法:constarrArray();arr.map((item,index,arr)//函数体return;);//参数1:数组中的每一项(必选)//参数2:索引(可选)//参数3:当前遍历的数组本身(可选)//注
Irene181 Irene181
4年前
一篇文章带你了解Python高阶函数
一、什么是高阶函数?高阶函数是在Python中一个非常有用的功能函数,所谓高阶函数就是一个函数可以用来接收另一个函数作为参数,这样的函数叫做高阶函数。通过案例代码分析,一步一步深入概念。二、变量可以指向函数以Python内置的求绝对值的函数abs()为例。调用该函数用以下代码:print(abs(10))运行结果:但是,如果只写abs呢?prin
Irene181 Irene181
4年前
一篇文章带你了解Python高阶函数
一、什么是高阶函数?高阶函数是在Python中一个非常有用的功能函数,所谓高阶函数就是一个函数可以用来接收另一个函数作为参数,这样的函数叫做高阶函数。通过案例代码分析,一步一步深入概念。二、变量可以指向函数以Python内置的求绝对值的函数abs()为例。调用该函数用以下代码:print(abs(10))运行结果:但是,如果只写abs呢?prin
Easter79 Easter79
3年前
swift高阶函数和函数式编程
Swift函数式编程,函数式编程的思想就是一切皆函数,可以是被当作变量,参数,返回值。高阶函数运用对swift编程很重要。基础一般常用的几个高阶函数如下letnumArr5,4,6,1,7//遍历所有并操作print(numArr.map{$01})//输出:6,5,7,2,8
Bill78 Bill78
4年前
python中的map函数
1map()函数的简介以及语法:map是python内置函数,会根据提供的函数对指定的序列做映射。map()函数的格式是:map(function,iterable,...)第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。把函数依次作用在list中的每一个元素上
菜园前端 菜园前端
2年前
什么是高阶函数?
原文链接:什么是高阶函数?有两种情况都可以被定义为高阶函数,第一种是把函数作为参数传递给另外一个函数,第二种是把函数作为另一个函数的返回结果。就像我们平时调用函数,一般都是传递值类型或者对象和数组等参数,或者是函数返回结果是值类型或者是对象和数组,高阶函数
Stella981 Stella981
3年前
MapReduce中combine、partition、shuffle的作用是什么
概括:combine和partition都是函数。中间的步骤应该仅仅有shuffle!1.combinecombine分为map端和reduce端,作用是把同一个key的键值对合并在一起,能够自己定义的。combine函数把一个map函数产生的<key,value对(多个key,value)合并成一个新的<key2,value
Stella981 Stella981
3年前
Python中的函数式编程教程,学会用一行代码搞定
01前言在本文中,您将了解什么是函数范型,以及如何在Python中使用函数式编程。在Python中,函数式编程中的map和filter可以做与列表相同的事情。这打破了Python的禅宗规则之一,因此函数式编程的这些部分不被认为是“Python式的”。但是由于函数式编程高阶编程的必经之路,所以我们需要了解甚至熟练掌握。02
Stella981 Stella981
3年前
Python中map()函数浅析
MapReduce的设计灵感来自于函数式编程,这里不打算提MapReduce,就拿python中的map()函数来学习一下。文档中的介绍在这里:map(_function_,_iterable_,_..._)Apply_function_toeveryitemof_iterable_andreturnalistofth
Stella981 Stella981
3年前
Python进阶
python高阶函数可以接受函数作为参数的函数defadd(x,y,f):   returnf(x)f(y)由于参数想,x,y和f都可以任意传入,如果f传入其他函数,就可以得到不同的返回值map()函数它接收一个函数f和一个list,并通过把函数f依次作用在list的每
Stella981 Stella981
3年前
JavaScript中Filter的使用
filterfilter也是一个常用的操作,它用于把Array的某些元素过滤掉,然后返回剩下的元素。和map()类似,Array的filter()也接收一个函数。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。例如,在一个