文档章节

零基础学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
基于编程人员Python学习第一章节

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

Aikenwu
08/13
0
0
5个python爬虫教材,让小白也有爬虫可写,含视频教程!

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

柯西带你学编程
06/12
0
0
零基础如何优雅入门“网红”Python?小白必看的MicroPython视频合集:从入门到精通!

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

bodasisiter
09/10
0
0
Python、C 还是Java,零基础的小白想学习编程应该挑选哪门语言?

你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的Java语言等。今天小编给大家分享一下Python这门计算机程序设计语言...

dcpeng
08/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

django 2 urlpatterns 中正则匹配路由

django 2 urlpatterns 中正则匹配路由: 在项目的urls.py中导入re_path:

MichaelShu
35分钟前
2
0
Spring MVC 到 Spring Boot 的简化之路

背景 从Servlet技术到Spring和Spring MVC,开发Web应用变得越来越简捷。但是Spring和Spring MVC的众多配置有时却让人望而却步,相信有过Spring MVC开发经验的朋友能深刻体会到这一痛苦。因为...

别打我会飞
40分钟前
1
0
python做文本内容指定区域字符串替换

需求: 因为公司项目需要做SEO优化,所以对项目中的各种长连接做优化,比如本文中提到的精简路径;之前已经批量吧文本的路径名字等做过修改,这里不再赘述;这里的问题是外部的路径修改了,文...

坦途abc
今天
4
0
MySQL 关键字模糊匹配,并按照匹配度排序

MySQL 关键字模糊匹配,并按照匹配度排序。 方式一、按照关键字搜索,然后根据关键字所占比例排序 SELECTdrug_name,pinyinFROMtbl_drugWHEREpinyin LIKE '%AM%'ORDER BY...

yh32
今天
5
0
虚拟机学习之一:java内存区域与内存溢出异常

1.运行时数据区域 java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途和创建、销毁时间,有的区域伴随虚拟机进程的启动而存在,有些区...

贾峰uk
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部