文档章节

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

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

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

柯西带你学编程
06/12
0
0
一个月入门Python爬虫,快速获取大规模数据

数据是创造和决策的原材料,高质量的数据都价值不菲。而利用爬虫,我们可以获取大量的价值数据,经分析可以发挥巨大的价值,比如: 豆瓣、知乎:爬取优质答案,筛选出各话题下热门内容,探索...

Python开发者
04/25
0
0
荐书丨确认过眼神,这份Python书单一定是你的菜

点击上方“程序人生”,选择“置顶公众号” 第一时间关注程序猿(媛)身边的故事 Python 是军刀型的开源工具,被广泛应用于Web 开发、爬虫、数据清洗、自然语言处理、机器学习和人工智能等方...

csdnsevenn
05/05
0
0
Python 2 和 Python 3 主要区别有哪些(一)?

Guido(Python之父,仁慈的独裁者)在设计 Python3 的过程中,受一篇文章 “Python warts” 的影响,决定不向后兼容,否则无法修复大多数缺陷。---摘录自《流畅的Python》 你可能从来没有听说...

liuzhijun
2017/08/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

获取多个集合列表的笛卡尔积

获取多个集合笛卡尔积 电商中典型业务场景:商品搜索 单属性属性值之间为并查询 不同属性的属性值之间查询为与查询 import java.util.ArrayList;import java.util.List;/** * Created w...

键走偏锋
15分钟前
0
0
echarts 迁移地图 控制鼠标缩放大小比例

在网上找了好久没有找到解决方式,还是重新看了一下文档,终于找到的解决方案, zoom:1, //默认显示级别 scaleLimit:{min:1,max:3}, // 缩放级别 echarts 文档-配置项链接 http://echarts.b...

心驰
18分钟前
0
0
Boot2Docker ISO is out-of-date,

Boot2Docker ISO is out-of-date, downloading the latest release. 使用docker-machine时无法更新Boot2Docker ISO导致创建vm machine失败 解决方法:关闭网络,创建好之后再开启...

writeademo
26分钟前
0
0
在 Tomcat 中设置 Tapestry 框架的 html 热加载

如果开发中使用到了 Tapestry 这个框架,如果事先没有设置过的话,开发的时候 html 是不会热加载的,也就是说修改了 html 文件,不能刷新浏览器后立马看到修改完的效果,必须先重新启动应用服...

LeoXu
48分钟前
0
0
【微服务】开启巨石应用到微服务的探索

背景 在过去的一年时间里,我一直在从事一件事情,将现有的单体应用(巨石应用)向微服务改造。 接下来,将持续整理一些在微服务路上的学习与成长。 为什么要做微服务 单体应用,开发、部署简...

艳沐石
58分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部