0

Python でProject Euler の問題 2を解決しようとしていますが、イテラブルに基づく戦略を決定しました。

これがフィボナッチ数列のジェネレータです。

def fnFibonacci():
    fibNumPrev, fibNumCurrent = 0, 1
    while True:
        yield fibNumCurrent
        fibNumPrev, fibNumCurrent = fibNumCurrent, fibNumCurrent + fibNumPrev

400 万未満で 2 で割り切れるフィボナッチ数を除外しようとすると、うまくいかず、すべてが除外されます。

sum(list(itertools.takewhile(lambda x: x < 4e6 and x % 2 == 0 , fnFibonacci())))

ただし、これは両方とも(均一条件を無視します):

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])

仕事。何が起こっているのか本当にわかりません。

4

1 に答える 1

5

itertools.takewhile基準に一致しない最初の値が見つかったときに停止します。最初の数は 1 で 2 で割り切れないため、すぐに停止します。

これを書くことができます:

 sum(x for x in itertools.takewhile(lambda n: n < 4e6, fnFibonacci()) 
                if x % 2 == 0)
于 2013-10-02T14:57:26.190 に答える