我试图用Python解决Project Euler problem 2,并决定了一个基于iterables的策略。在
这是Fibonacci序列的生成器
def fnFibonacci():
fibNumPrev, fibNumCurrent = 0, 1
while True:
yield fibNumCurrent
fibNumPrev, fibNumCurrent = fibNumCurrent, fibNumCurrent + fibNumPrev
当我试图过滤掉小于400万并可被2整除的斐波纳契数时,它不起作用,过滤掉所有的东西:
^{pr2}$但是,这两种情况(忽略了均匀度条件):
sum(list(itertools.takewhile(lambda x: x < 4e6, fnFibonacci())))
以下是理解:
sum([fibNum for fibNum in list(itertools.takewhile(lambda x: x < 4e6, fnFibonacci())) if fibNum % 2 == 0])
工作。不知道到底发生了什么。在
itertools.takewhile
在找到第一个与条件不匹配的值时停止。因为第一个数是1,不能被2整除,所以它立即停止。在你可以这样写:
相关问题 更多 >
编程相关推荐