使用lambda函数过滤iterables

2024-10-03 11:20:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用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])

工作。不知道到底发生了什么。在


Tags: lambdaproject策略listsumitertoolsproblemeuler
1条回答
网友
1楼 · 发布于 2024-10-03 11:20:23

itertools.takewhile在找到第一个与条件不匹配的值时停止。因为第一个数是1,不能被2整除,所以它立即停止。在

你可以这样写:

 sum(x for x in itertools.takewhile(lambda n: n < 4e6, fnFibonacci()) 
                if x % 2 == 0)

相关问题 更多 >