2013-07-13 23 views
2

我收到了一個程序設計來製作一個甚至斐波那契數列表的意外結果。代碼是找出所有的號碼部分工作正常,但是當它到達在列表中修改斐波納契數列 - Python

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 

回答

6

您在修改列表的同時迭代列表。不要這樣做。

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

哦。有沒有一種方法可以獨立評估列表中的每個項目,然後對其執行操作並避免迭代 - 修改問題? – Chandrew

+0

另外,在你發佈的代碼中,它看起來像第一個x必須指向不同於其他x的東西......你能調用這樣的函數嗎? – Chandrew

+0

@ user2579517這個解決方案確實做到了 - 換句話說,它在'fib_list'上循環並抓取所有'x',使得'x%2 == 0',在這個過程中創建一個新列表,所以原始列表是不變的。 –