zoukankan      html  css  js  c++  java
  • python生成器之斐波切纳数列

    面试的时候遇到过这样的一个题目:

    斐波切纳数列1,2,3,5,8,13,21.........根据这样的规律,编程求出400万以内最大的斐波切纳数,并求出是第几个斐波切纳数。

    方法一

    方法二:这个方法用到了生成器:

    生成器介绍:通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,

    如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

    所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种

    一边循环一边计算的机制,称为生成器(Generator)。

    生成器tips:

    generator保存的是算法,每次调用next(),就计算出下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。

    当然,上面这种不断调用next()方法实在是太变态了,正确的方法是使用for循环,因为generator也是可迭代对象。

    generator是非常强大的工具,在Python中,可以简单地把列表生成式改成generator,也可以通过函数实现复杂逻辑的generator。

    要理解generator的工作原理,它是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。对于函数改成的generator来说,遇到return语句或者执行到函数

    最后一行语句,就是结束generator的指令for循环随之结束

    def fib(max):
        a,b = 0, 1
        while b<max:
            yield b
            a,b = b, a+b
    index
    =0 for i in fib(4000000): index = index+1 print str(index) +"" +str(i)
  • 相关阅读:
    解决:安装SQl 2008为SQL Server代理服务提供的凭据无效
    jquery 瀑布流效果
    设置swfupload 一次只上传一个文件
    设置swfupload选择文件后不自动上传
    Sublime Text3 & MinGW & LLVM CLang 安装配置CC++编译环境
    在WINDOWS中安装使用SIGPACK(MinGW64+Sublime Text3 &Visual Studio)
    关于ThinkPHP_5 的入口文件
    centos7安装lamp环境
    ThinPHP_5的请求和响应
    MySQL的字段长度和显示宽度
  • 原文地址:https://www.cnblogs.com/codeblock/p/5440907.html
Copyright © 2011-2022 走看看