2016-11-14 183 views
-5

我想知道如何迭代我的代碼中的列表。我想擺脫每個等於10的索引值,並且在完成該程序後,我得到一個超出範圍錯誤的索引。我想知道這意味着什麼,如何優化我的代碼,以便擺脫每個等於10的值,然後返回沒有10個值的新列表。迭代列表python程序

這裏是我的代碼:

mylist = [10,10,10,10,10,10,9,9,9,9,9,0,0,0] 
for i in range(len(mylist)): 
    if mylist[i] ==10: 
     mylist.pop(i) 


print(mylist) 
+0

我強烈建議你讀的介紹Python的教程:http://sopython.com/wiki/What_tutorial_should_I_read%3F。 – jonrsharpe

回答

0

索引超出範圍的錯誤是,當你試圖重複過去的數據結構的項目的數量。所以說如果你嘗試訪問第4項,你會在列表中有3個項目,它會給出索引錯誤。

您遇到的問題是因爲您在迭代它時突變了列表。

編輯您當前循環的數據通常不是一個好主意。一個更好的辦法可能是使用列表理解這樣

mylist = [10,10,10,10,10,10,9,9,9,9,9,0,0,0] 
mylist = [x for x in mylist if x != 10] 

>>> mylist 
[9, 9, 9, 9, 9, 0, 0, 0] 
0

請嘗試以下如果你的目標只是爲了消除值爲10項:

>>> mylist = [10,10,10,10,10,10,9,9,9,9,9,0,0,0] 
>>> [x for x in mylist if x != 10] 
[9, 9, 9, 9, 9, 0, 0, 0] 
0

爲什麼你得到索引超出範圍:在程序開始時, len(mylist)= 14,但是當您從列表中刪除元素時,列表的長度爲 會減少,並且您最終會訪問不存在 的索引。

如何修復它:您可以嘗試以相反的順序訪問元素,並在您遇到它時刪除10。

a = [10,10,10,10,10,10,9,9,9,9,9,0,0,0] 
for i, e in reversed(list(enumerate(a))): 
    if e == 10: 
     a.pop(i) 
print a