tch*_*rty 0 python lambda python-itertools python-3.x
我试图在Python中解决Project Euler问题2,并决定基于iterables的策略.
这是Fibonacci序列的生成器,
def fnFibonacci():
fibNumPrev, fibNumCurrent = 0, 1
while True:
yield fibNumCurrent
fibNumPrev, fibNumCurrent = fibNumCurrent, fibNumCurrent + fibNumPrev
Run Code Online (Sandbox Code Playgroud)
当我尝试过滤掉小于4百万且可被2整除的斐波那契数字时,它不起作用,将所有内容过滤掉:
sum(list(itertools.takewhile(lambda x: x < 4e6 and x % 2 == 0 , fnFibonacci())))
Run Code Online (Sandbox Code Playgroud)
但是,这两个(忽略了均匀条件):
sum(list(itertools.takewhile(lambda x: x < 4e6, fnFibonacci())))
Run Code Online (Sandbox Code Playgroud)
这个列表理解:
sum([fibNum for fibNum in list(itertools.takewhile(lambda x: x < 4e6, fnFibonacci())) if fibNum % 2 == 0])
Run Code Online (Sandbox Code Playgroud)
工作.真的无法分辨出发生了什么.
itertools.takewhile当找到第一个与标准不匹配的值时停止.由于第一个数字是1而不能被2整除,它会立即停止.
你可以这样写:
sum(x for x in itertools.takewhile(lambda n: n < 4e6, fnFibonacci())
if x % 2 == 0)
Run Code Online (Sandbox Code Playgroud)