zoukankan      html  css  js  c++  java
  • 零基础学python-19.11 使用迭代工具模拟map

    这一章节我们来讨论一下使用迭代工具模拟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-目录

     



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

  • 相关阅读:
    Python2+appinum基础操作封装
    appinum+python环境搭建
    Python学习-pymysql(一)
    小程序onShow事件获取options方法
    css中content-box和border-box当宽度为百分比时的位置区别,vw和%区别
    JavaScript
    canvas入门基础,七巧板、五角星、粒子时钟等
    JavaScript 自适应轮播图
    css使用padding-bottom百分比进行提前占位,防止抖动
    Dreamweaver配色方案
  • 原文地址:https://www.cnblogs.com/raylee2007/p/4896709.html
Copyright © 2011-2022 走看看