我正在研究Project Euler问题2.我需要找到所有偶数Fibonacci数的总和,最多可达400万。我有一个函数可以生成所有可能的斐波纳契数,直到用户输入的upperBound。我将这个fib列表传递给另一个函数,以消除奇数值。我试图遍历列表并删除元素,如果它是奇数。它返回一个错误说:
in evenFibs
del list_of_fibs[value]
IndexError: list assignment index out of range
这是我的evenFibs()代码:
def evenFibs(upperBound):
list_of_fibs = getFibs(upperBound)
for value in list_of_fibs:
if value % 2 != 0:
del list_of_fibs[value]
return list_of_fibs
我不确定为什么会出现这种错误。
答案 0 :(得分:0)
请注意,在迭代时不应该更改数组,也要从数组中删除元素,你应该使用元素的索引,而不是值。您可以使用列表的index
方法获取具有特定值的第一个元素的索引。至于你的任务,最好使用列表理解:
def evenFibs(upperBound):
list_of_fibs = getFibs(upperBound)
return [value for value in list_of_fibs if value % 2 == 0]