2016-03-11 101 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