Python程序找到斐波纳契系列.更多Pythonic方式

Lak*_*sad 6 python

还有另一个线程来讨论Python中的Fibo系列.这是为了将代码调整为更加pythonic.如何在Python中编写Fibonacci序列

我爱上了我为解决Project Euler Q2而编写的这个程序.我在Python中进行新编码,每次使用Pythonic方式都会感到高兴!你能建议一个更好的Pythonic方法吗?

项目欧拉Q2.求斐波那契序列中所有偶数项的总和不超过四百万.

fib=[]
def fibo(a=-1,b=1,upto=4000000):
    if a+b>=upto:
        return
    else:
        a,b=b,a+b
        fib.append(b)
        fibo(a,b)

fibo()
even=[i for i in fib if not i%2]
print sum(even)
Run Code Online (Sandbox Code Playgroud)

Con*_*tin 15

使用生成器是一种Pythonic方法,可以在保留内存的同时生成长序列:

def fibonacci():
  a, b = 0, 1
  while True:
    yield a
    a, b = b, a + b

import itertools
upto_4000000 = itertools.takewhile(lambda x: x <= 4000000, fibonacci())
print(sum(x for x in upto_4000000 if x % 2 == 0))
Run Code Online (Sandbox Code Playgroud)


Jor*_*nko 14

首先,我将fibo()作为生成器:

def fibo(a=-1,b=1,upto=4000000):
    while a+b<upto:
        a,b = b,a+b
        yield b
Run Code Online (Sandbox Code Playgroud)

然后我也选择均匀作为生成器而不是列表理解.

print sum(i for i in fibo() if not i%2)
Run Code Online (Sandbox Code Playgroud)