还有另一个线程来讨论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)