Я пытаюсь решить Project Euler problem 2 в Python и решил по стратегии на основе итераций.Фильтрация итераций с использованием лямбда-функции
Вот генератор для последовательности Фибоначчи,
def fnFibonacci():
fibNumPrev, fibNumCurrent = 0, 1
while True:
yield fibNumCurrent
fibNumPrev, fibNumCurrent = fibNumCurrent, fibNumCurrent + fibNumPrev
Когда я пытаюсь отфильтровать числа Фибоначчи, которые менее чем 4 миллиона и делится на 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])
работа. Не могу сказать, что происходит.
См [здесь] (http://codereview.stackexchange.com/a/23388/4916) для подобного подхода. – DSM
@DSM Вау, это жутко, как мой подход. Означает ли это, что я хороший программист на Python сейчас? ;) – tchakravarty
«Должен быть один очевидный способ сделать это», как мы говорим, и вы его нашли. Вы изучаете Дзэн. : ^) – DSM