2016-11-14 147 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