文档章节

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

raylee2015
 raylee2015
发布于 2015/10/21 08:10
字数 833
阅读 1
收藏 0

精选30+云产品,助力企业轻松上云!>>>

这一章节我们来讨论一些序列映射函数: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)
<map object at 0x0247B050>
>>> type(map(add,aList))
<class 'map'>
>>>

我们再通过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)) <span style="font-family: Arial, Helvetica, sans-serif;">#把表达式单独嵌套在里面</span>
[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的实现。


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

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

点击跳转零基础学python-目录

 



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

raylee2015
粉丝 6
博文 265
码字总数 44224
作品 0
江门
私信 提问
加载中
请先登录后再评论。
Python基础总结成千行代码,让Python入门更简单!

只要学会这千行代码,不管你是零基础还是弱基础或是没有接触过编程,都可以快速入门Python!当时我就不信邪啊,等我看完之后,即使作为一个Python老鸟了,还是领会到了很多教授他的独特见解!...

糖宝lsh
2018/09/10
260
0
提升效率必备!8个超好用的Python内置函数

文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 作者: 吃着不想停 PS:如有需要Python学习资料的小伙伴可以加点击下...

其实还好啦
04/14
0
0
Python基础语法视频教程全39集,历时1个多月终于更新完毕,需要的拿走!

我应该是在4月底5月初的时候,说我准备录制一个python的教学视频。 我坚持了一个多月,每天晚上9点准时更新一集,从未断过。 截止上上周,全部39集python基础语法系列更新完毕。 完整教程目录...

Tiger-1985
07/01
0
0
Python 2和Python 3的区别?

Python 社区,有这么个怪问题:“学 Python 到底是学2还是学3?”这个问题就像月经一样每隔断时间就出现在你面前,也成了很多初学者的选择困惑,这个问题的“始作俑者”当然是 Python 它爹,...

智云编程
2018/11/17
4
0
零基础学编程

这是发表在微信公众号上的“零基础学编程”系列文章的总索引,不断更新中...... “零基础学编程”都需要哪些基础? 英语好对学计算机编程有极大的帮助;正确地使用搜索功能; 找个导师;早点...

申龙斌的程序人生
2017/01/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

跨越了6个阶段,我仍然是生物信息学初学者

首先非常欢迎大家分享自己与生物信息学/生信技能树的故事! 上一期是:我如何从生物科学到生物信息 这一期是我在朋友圈看到了我们单细胞天地常驻编辑周运来的真情流露,邀请他投稿的我们生信...

biotrainee
前天
17
0
网飞是如何运用心理学来完善其客户体验的

原文地址:https://36kr.com/p/5289228 译者:俊一 占据全球网站流量 15%的奈飞,其用户体验设计背后有哪些秘密? 神译局是 36 氪旗下编译团队,关注科技、商业、职场、生活等领域,重点介绍...

高行
02/08
0
0
shell编程中的循环脚本

本文中的部分脚本来源于网络,就不申明原创了,如果这些东西自己学会了,那就是属于自己的了。 求从1加到100的和 使用for循环求和: #!/bin/bash declare -i sum=0 for ((i=1;i<=100;i++));...

Double_冬
2018/08/16
0
0
智能合约:介绍、geth、Ethereum Wallet

从看雪论坛换了一本《智能合约安全分析和审计指南》,看了一些智能合约相关的内容,因为我之前对于区块链的了解仅仅是只知道世界上有一种叫做比特币的东西,所以对于这些概念的理解还是比较困...

yichen115
04/26
0
0
Vue和React技术风格上的不同

在主流框架中,Vue和React都属于全球热门,各自有着大量用户,两者之间的优缺点便带来了众多讨论。 那么这两者之间的关键区别在于哪些方面?为何熟练掌握Vue成为越来越多公司的岗位要求? Vu...

若川
07/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部