2016-03-11 97 views
1

我試着通過指定列表中我要刪除的索引刪除列表中的項目,但我得到一個錯誤。蟒蛇從列表中刪除項目通過指定索引

我的代碼:

tuu = [1,2,3,4,'nan', 8] 

for i in range(len(tuu)): 
    if tuu[i] == 'nan': 
     del tuu[i] 

,但我得到的錯誤:

 7 for i in range(len(tuu)): 
----> 8  if tuu[i] == 'nan': 
     9   del tuu[i] 

IndexError: list index out of range 
+0

嘗試remove方法。 – Elan

+0

'[我爲我如果我!='南'''' –

+0

當你想在迭代時使用'range(len(list))'''在for循環中刪除項目,你應該刪除[reverse way] (http://stackoverflow.com/questions/35618307/how-to-transform-string-into-dict/35618686#35618686)(查看鏈接) – Ian

回答

2

當您使用for循環,Python會致電您遍歷可迭代__iter____iter__將返回一個迭代器對象,用於跟蹤您當前在迭代中的位置。

如果修改迭代(列表)的長度,同時遍歷它,迭代器都將感到困惑。

刪除tuu[i]之後,您的列表中只有一個元素,但迭代器不會知道並嘗試訪問先前的最後一個索引 - >這就是您獲得IndexError的位置。

的規範的方法來過濾Python中的列表是建立一個新的列表並重新分配舊列表的名稱:

>>> tuu = [1, 2, 3, 4, 'nan', 8] 
>>> tuu = [x for x in tuu if x != 'nan'] 
>>> tuu 
[1, 2, 3, 4, 8] 
+0

在這種情況下,'tuu [5]'被刪除。如果有人想刪除另一個列表中相同索引的元素,那麼它會怎樣呢?換句話說,如何從第一個列表中找到已刪除元素的索引,並從第二個列表中刪除相同索引的元素? – mikey