这一章节我们来讨论一些序列映射函数: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] >>>
>>> def add(x): return x+1 >>> aList=[1,2,3,4,5] >>> list(map(add,aList)) [2, 3, 4, 5, 6] >>>
>>> map(add,aList) <map object at 0x0247B050> >>> type(map(add,aList)) <class '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)) <span style="font-family: Arial, Helvetica, sans-serif;">#把表达式单独嵌套在里面</span> [2, 3, 4, 5, 6] >>>
注意:由于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] >>>
>>> 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] >>>
总结:这一章节我们讨论了map的使用场景,还有map对多序列的支持,最后我们还模拟了map的实现。
这一章节就说到这里,谢谢大家
------------------------------------------------------------------
点击跳转零基础学python-目录
版权声明:本文为博主原创文章,未经博主允许不得转载。