zoukankan      html  css  js  c++  java
  • 廖雪峰老师博客学习《通过生成器generator生成列表式杨辉三角》

    • 说明:这是我接触生成器概念后,自己对它的理解,可能比较表面,没深入理解,也可能有错误。后续校正错误认知,将有关generator作为一个tag了!
    • 希望以后能活用。
    • 先贴出自己写的triangles()生成器,习题需求查看url页面最后:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317799226173f45ce40636141b6abc8424e12b5fb27000
    • #在线编辑器真难用!!
    • # /usr/bin/env python3
      # coding:utf-8
      # author:zhangjiaqi<1399622866@qq.com>
      
      
      def triangles():
          lt = [1]
          while True:
              yield lt
              if lt.__len__() == 1:
                  lt.append(1)
              else:
                  len = lt.__len__()
                  tmplist = [v for v in range(len-1)]   #构建一个临时列表,临时列表相较于最后生成,去掉了头尾。
                  for n in range(len-1):
                      tmplist[n] = lt[n] + lt[n+1]
                  lt = [1] + tmplist + [1]
      
      
      if __name__ == '__main__':
          g = triangles()
          for i in range(10):
              print(next(g))
      • 运行结果
    [1]
    [1, 1]
    [1, 2, 1]
    [1, 3, 3, 1]
    [1, 4, 6, 4, 1]
    [1, 5, 10, 10, 5, 1]
    [1, 6, 15, 20, 15, 6, 1]
    [1, 7, 21, 35, 35, 21, 7, 1]
    [1, 8, 28, 56, 70, 56, 28, 8, 1]
    [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
    • 思路:
      • 首先,杨辉三角,除了第一行和第二行之间没发现规律,就已特例直接产生
      • 然后,从第三行开始,出去头尾的元素,中间元素是前一行列表元素两两的和,那么我就构造一个中间元素的临时列表,然后根据前一行列表产生临时列表的值
      • 最后,给中间元素列表头尾添加上[1],这样就产生了后续列表的算法。
    • 别人的思路:网上的思路是发现这样一个算法规律:后一行是用前一行构造两个分别是头尾加上[0]的列表,然后两个列表zip()一下。就得到需求列表。
      • 思路不同,用到的实现手法就不同。
      • 见识了zip()的应用。什么叫人生苦短,****!
      • 自己的思路就没那么简洁。
    • 解剖一下和生成器generator有什么好处(比较表面):
      1. 从产生和存放杨辉三角的角度,来说说generator:triangles()函数完全可以不用yield,例如通过一个行数参数打印输出一个杨辉三角(这就需要在一个变量来存放一个完整的杨辉三角,最后再return整个杨辉三角)。使用yield,函数就返回了一个生成器对象,这个对象又是可迭代的,通过迭代再输出杨辉三角。前者通过函数时就生成了杨辉三角存放到内存中,然后从打印输出;后者这是一边生成一遍输出,根本就没有在内存中存放完整的杨辉三角。可以说生成器就是节约内存存储空间
      2. 看到上面,有人就会说了,就算不是使用生成器,将函数只返回指定的行,然后再循环调用输出,就不用在内存中存放一个完整的。确实,但是生成器还有一个特点就是可迭代,直接就可以用for 语句,那就是可迭代的优点了。
      3. 初学 者能力有限,感觉自己也没真正解剖出来。
  • 相关阅读:
    用 Python 带你看各国 GDP 变迁
    Fluent Interface(流式接口)
    probing privatePath如何作用于ASP.NET MVC View
    Word插入htm文件导致文本域动态增加的一个问题
    Visual Studio 2013附加进程调试IE加载的ActiveX Control无效解决方法
    Ubuntu下Chrome运行Silverlight程序
    Windows Phone Bing lock screen doesn't change解决方法
    SPClaimsUtility.AuthenticateFormsUser的证书验证问题
    Web Service Client使用Microsoft WSE 2.0
    Visual Studio 2013安装Update 3启动crash的解决方法
  • 原文地址:https://www.cnblogs.com/ZJiQi/p/8535091.html
Copyright © 2011-2022 走看看