修改列表中的斐波那契级数——Python

修改列表中的斐波那契级数——Python,python,fibonacci,series,Python,Fibonacci,Series,我从一个程序中得到了一个意想不到的结果,这个程序设计用来列出偶数斐波那契数。代码中查找所有数字的部分工作正常,但当它到达 if i % 2 != 0 fib_list.remove(i) 部分似乎出了问题,因为它没有去掉所有的奇数。下面是整个程序。我做错了什么 fib_list = [1, 2, 3] for i in range(4, 4000001): if (i - fib_list[-1] - fib_list[-2]) == 0: fib_list.

我从一个程序中得到了一个意想不到的结果,这个程序设计用来列出偶数斐波那契数。代码中查找所有数字的部分工作正常,但当它到达

if i % 2 != 0
    fib_list.remove(i)
部分似乎出了问题,因为它没有去掉所有的奇数。下面是整个程序。我做错了什么

fib_list = [1, 2, 3]

for i in range(4, 4000001):
    if (i - fib_list[-1] - fib_list[-2]) == 0:
        fib_list.append(i)

print fib_list

for i in fib_list:
    if i % 2 != 0:
        fib_list.remove(i)

print fib_list

您正在修改列表时对其进行迭代。不要那样做

[x for x in fib_list if x % 2 == 0]

哦是否有一种方法可以独立评估列表中的每个项目,然后对其执行操作,避免在修改时出现迭代问题?此外,在您发布的代码中,第一个x看起来一定是指与另一个x不同的东西。。。你能调用这样的函数吗?@user2579517这个解决方案正是这样做的——换句话说,它在
fib_list
上循环,并获取所有
x
,这样
x%2==0
,在这个过程中创建一个新列表,使原始列表不受影响。实际上,我的代码满足了你的要求。这是一个好主意。这是Python的一个特性。它对fib\u列表中的x执行与
相同的操作:如果x%2==0:new\u list.append(x)
。这不会修改原始列表,但会生成一个新列表。因此,它可能没有内存效率。但是你必须这样做以避免错误。或者您可以使用
(如果x%2==0,则fib_列表中的x代表x)
,这将在Python中生成另一个特性。它是内存有效的。@user2579517