python函数映射教学_零基础学python-18.9 序列映射函数:map

本文介绍了Python内置函数map的使用场景,如对序列元素的加法操作,并演示了结合lambda表达式的简洁用法。还探讨了map对多序列的支持,以及如何模拟map的for循环实现。重点讲解了map的局限性和其在性能上的特点。
摘要由CSDN通过智能技术生成

这一章节我们来讨论一些序列映射函数:map

map函数,就是引入一个函数,然后对序列(字符串、列表、字典等)的每一个对象进行操作

1.场景:

对序列的所有对象分别加1

一般我们会先想到使用循环for:

>>> aList=[1,2,3,4,5]

>>> def add(aList):

for x in range(len(aList)):

aList[x]+=1

>>> add(aList)

>>> aList

[2, 3, 4, 5, 6]

>>>

由于思维的惯性,因此我们第一时间就会想到for,但是,我们现在知道了map这个函数,我们就试试重写函数

>>> def add(x):

return x+1

>>> aList=[1,2,3,4,5]

>>> list(map(add,aList))

[2, 3, 4, 5, 6]

>>>

我们只需要写一个特定的加法函数,然后使用内建函数map,然后返回一个map的类型

>>> map(add,aList)

>>> type(map(add,aList))

>>>

我们再通过list把map转换成列表,打印出来

两组代码的结果都是一样的,但是明显第二组代码结构简单清晰,当然,对于初学者或者不知道map函数的除外,他们会觉得第一种才是首选

上面的代码引入了一个add的函数,但是,很有可能这个函数在这里只使用一遍,其他地方都不使用了,我们在这里就结合lambda表达式,简化上面的代码

>>> aList=[1,2,3,4,5]

>>> add=lambda x:x+1 #把表达式单独列出来

>>> list(map(add,aList))

[2, 3, 4, 5, 6]

>>> list(map(lambda x:x+1,aList)) #把表达式单独嵌套在里面

[2, 3, 4, 5, 6]

>>>

结合了lambda表达式,代码只剩下一行,但可读性更差

注意:由于map是使得每个序列对象都进行同样的操作,很多时候都不符合时间的需求,毕竟大多数的时间序列的操作都是需要分支条件来支持的,因此,map的操作具备一定的局限性。

2.多序列

map除了上面支持单序列之外,它还支持多序列

>>> list(map(pow,[1,2,3],[1,2,3]))

[1, 4, 27]

>>> list(map(pow,[1,2,3],[1,2,3],[1,2,3]))

[0, 0, 0]

>>>

从上面可以看出,map支持的多序列必须是满足里面函数的参数个数等于序列个数,例如pow需要两个参数,那么,我们只能提供两个序列,提供三个的时候返回0

>>> list(map(pow,[1,2,3],[1,2]))

[1, 4]

>>>

而且,如果序列里面的对象不相一致,它会自动截取

3.模拟map

下面我们来试一下自己模拟map的实现,我们使用for

>>> def add(x): return x+1

>>> def test(func,aList):

res=[]

for item in aList:

res.append( func(item))

return res

>>> aList=[1,2,3,4,5]

>>> test(add,aList)

[2, 3, 4, 5, 6]

>>>

上面的代码通过for来模拟map的函数实现,但是由于map是内建函数,使用c语音实现的,所以从性能上来说模拟的map要比内建的map慢

总结:这一章节我们讨论了map的使用场景,还有map对多序列的支持,最后我们还模拟了map的实现。

这一章节就说到这里,谢谢大家

------------------------------------------------------------------

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2015-09-21 17:16

浏览 602

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值