零基础学python-19.11 使用迭代工具模拟map
2015-10-21 00:00
232 查看
这一章节我们来讨论一下使用迭代工具模拟map。
在讨论之前,我们先看一些例子:
从上面的代码我们看出什么呢?
1.zip对序列的配对操作
2.map的一般使用
3.map里面的嵌套操作,有着zip的参与
我们今天就来使用zip模拟一下map,也就是最后一行代码:
上面的代码里面,其实非常明显的进行了zip的配对操作,我们下面给出等价代码:
注意:上面的代码非常依赖*args的传入语法,如果有一些问题,就会报错。
上面的代码是先通过zip解析配对*args传入的序列,然后将解析序列的对象当做参数传到func这个函数对象里面
上面的代码我们通过使用for来实现,下面我们来看看使用列表解析
上面的代码返回一样的结果,但是代码已经精简了许多。
继续,由于之前我们学到生成器,因此下面我们使用生成器来实现,这样可以降低运行时的内存浪费,提供性能
上面的代码分别通过yield以及生成器表达式来实现,从而提高性能与降低内存浪费。
总结:这一章节主要讨论了使用迭代工具模拟map,并且讨论了如何使用生成器来提高性能。
这一章节就说到这里,谢谢大家
------------------------------------------------------------------
点击跳转零基础学python-目录
版权声明:本文为博主原创文章,未经博主允许不得转载。
在讨论之前,我们先看一些例子:
>>> 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-目录
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法
- Python实现的基于ADB的Android远程工具
- Ruby中的迭代器详解
- Ruby中Block和迭代器的使用讲解
- Lua中的迭代器浅析
- Lua中的迭代器和泛型for介绍
- C#特性-迭代器(上)及一些研究过程中的副产品
- C#迭代器模式(Iterator Pattern)实例教程
- Erlang中的映射组Map详细介绍
- c++中map的基本用法和嵌套用法实例分析
- 在Redis数据库中实现分布式速率限制的方法
- Lua中的迭代器和泛型for学习总结
- 浅谈javascript 迭代方法
- C#特性 迭代器(下) yield以及流的延迟计算
- JavaScript中实现Map的示例代码
- jquery中map函数与each函数的区别实例介绍