文档章节

零基础学python-19.11 使用迭代工具模拟map

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

这一章节我们来讨论一下使用迭代工具模拟map。

在讨论之前,我们先看一些例子:

>>> list(zip([1,2,3],[4,5,6,7]))
[(1, 4), (2, 5), (3, 6)]
>>> list(zip('abcdef','gh'))
[('a', 'g'), ('b', 'h')]
>>> list(zip([1,2,3]))
[(1,), (2,), (3,)]
>>> list(map(abs,[-2,-1,0,1,2]))
[2, 1, 0, 1, 2]
>>> list(map(pow,[1,2,3],[4,5,6,7,8]))
[1, 32, 729]
>>>

从上面的代码我们看出什么呢?

1.zip对序列的配对操作

2.map的一般使用

3.map里面的嵌套操作,有着zip的参与

我们今天就来使用zip模拟一下map,也就是最后一行代码:

>>> list(map(pow,[1,2,3],[4,5,6,7,8]))
[1, 32, 729]
>>>

上面的代码里面,其实非常明显的进行了zip的配对操作,我们下面给出等价代码:

>>> def test(func,*args):
	res=[]
	for item in zip(*args):
		res.append(func(*item))
	return res

>>> test(pow,[1,2,3],[4,5,6,7,8])
[1, 32, 729]
>>>

注意:上面的代码非常依赖*args的传入语法,如果有一些问题,就会报错。

上面的代码是先通过zip解析配对*args传入的序列,然后将解析序列的对象当做参数传到func这个函数对象里面


上面的代码我们通过使用for来实现,下面我们来看看使用列表解析

>>> def test(func,*args):
	return [func(*item) for item in zip(*args)]

>>> test(pow,[1,2,3],[4,5,6,7,8])
[1, 32, 729]
>>>

上面的代码返回一样的结果,但是代码已经精简了许多。


继续,由于之前我们学到生成器,因此下面我们使用生成器来实现,这样可以降低运行时的内存浪费,提供性能

>>> def test(func,*args):
	return (func(*item) for item in zip(*args))

>>> test(pow,[1,2,3],[4,5,6,7,8])
<generator object <genexpr> at 0x0240C030>
>>> list(test(pow,[1,2,3],[4,5,6,7,8]))
[1, 32, 729]
>>>

>>> def test(func,*args):
	for item in zip(*args):
		yield func(*item)

		
>>> test(pow,[1,2,3],[4,5,6,7,8])
<generator object test at 0x02404FD0>
>>> list(test(pow,[1,2,3],[4,5,6,7,8]))
[1, 32, 729]
>>>

上面的代码分别通过yield以及生成器表达式来实现,从而提高性能与降低内存浪费。


总结:这一章节主要讨论了使用迭代工具模拟map,并且讨论了如何使用生成器来提高性能。


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

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

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

 



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

本文转载自:http://blog.csdn.net/raylee2007/article/details/49002187

共有 人打赏支持
raylee2015
粉丝 6
博文 265
码字总数 44224
作品 0
江门
私信 提问
Python基础总结成千行代码,让Python入门更简单!

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

糖宝lsh
09/10
0
0
5个python爬虫教材,让小白也有爬虫可写,含视频教程!

认识爬虫   网络爬虫,如果互联网是一张蜘蛛网,网络爬虫既是一个在此网上爬行的蜘蛛,爬了多少路程即获取到多少数据。 python写爬虫的优势   其实以上功能很多语言和工具都能做,但是用...

柯西带你学编程
06/12
0
0
基于编程人员Python学习第一章节

基于廖雪峰的python零基础学习后,自我总结。适用于有一定基础的编程人员,对我而言,则是基于.net已有方面,通过学习,记录自我觉得有用的地方,便于后续回顾。 主要以快速定位内容,通过直...

Aikenwu
08/13
0
0
零基础如何优雅入门“网红”Python?小白必看的MicroPython视频合集:从入门到精通!

零基础如何优雅入门“网红”Python?小白必看的MicroPython视频合集:从入门到精通! 若问时下最火的一门编程语言是什么?答案一定是Python。 就连高考都开始考Python啦! 这把火已经烧到了程...

bodasisiter
09/10
0
0
把 Python 扒了一层皮后,得出了这些结论......

在过去的两年间,Python一路高歌猛进,成功窜上“最火编程语言”的宝座。过去的2017年这一年,Python开发者在全球快速增长,国内小伙伴学习 Python的热情一路高涨。同时,Python成为大量开发...

CSDN资讯
11/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mybatis批量update操作的写法,及批量update报错的问题解决方法

mybatis的批量update操作写法很简单,如下: 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿...

编程SHA
41分钟前
6
0
EOS怎样删除钱包

在使用Eos的keosd钱包软件时,如果要删除EOS中指定名称的钱包,最简单的办法是 直接删除钱包文件,不过在删除钱包之前,需要先停止钱包软件的运行。 学习EOS应用开发要选这个:【EOS智能合约...

汇智网教程
48分钟前
8
0
Java语言快速实现简单MQ消息队列服务

使用 JAVA 语言自己动手来写一个MQ (类似ActiveMQ,RabbitMQ) 主要角色 首先我们必须需要搞明白 MQ (消息队列) 中的三个基本角色 ProducerBrokerConsumer 整体架构如下所示 自定义协议 首...

微笑向暖wx
57分钟前
5
0
ES5和ES6那些你必须知道的事儿

  ES5和ES6那些你必须知道的事儿      ES5新增的东西      一、数组方法      1、forEach      用途:遍历,循环      对于空数组不会执行回调函数      复制代码...

SEOwhywhy
今天
11
0
转:[windows]DOS批处理添加任务计划

[windows]DOS批处理添加任务计划 博客分类: Windows 转自:http://gwmold.blog.163.com/blog/static/1553319892010117113457232/ 自动创建每周运行一次的计划任务 创建计划任务可用at,sch...

SamXIAO
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部