0

我有一个列表,我想删除一个可选名称,但在该行下方

if newArray[i]==a:

它说“IndexError:列表索引超出范围”

newArray = ['John','Alex','Sophia','Rick']

a = str(raw_input('Type your name if you want to delete : '))
if a in newArray:
    for i in range(len(newArray)):
        if newArray[i]==a:
            del newArray[i] # I want to delete it
        else:
            print newArray[i]   
4

4 回答 4

0

随着循环的进行,一旦您从中删除了一个项目,newArray就不再可能到达 for 循环的末尾。如果len(newArray)现在是 3,则无法获取第四个元素,因此newArray[3]会引发错误。

一种更 Pythonic 的方法可能是使用列表推导。

if a in newArray:
    newArray = [i for i in newArray if i != a]

不过,它可能比.index()长列表的方法要慢(尽管我不打算对其进行分析并查看)。

于 2017-05-05T09:59:10.157 回答
0

不要同时从列表中迭代和删除元素。

最好这样做:

>>> a = raw_input("enter name to delete: ")
enter name to delete: Alex
>>> a
'Alex'
>>> if a in newArray:
...     del newArray[newArray.index(a)]
... 
>>> newArray
['John', 'Sophia', 'Rick']
于 2017-05-05T10:08:45.740 回答
0

为此,您不需要 for 循环:

>>> newArray = ['John','Alex','Sophia','Rick']
>>> a = 'Alex'
>>> newArray.index(a)
1
>>> del newArray[newArray.index(a)]
>>> newArray
['John', 'Sophia', 'Rick']
于 2017-05-05T10:10:33.837 回答
0

你也可以这样做。

newArray = ['John','Alex','Sophia','Rick']

a = str(raw_input('Type your name if you want to delete : '))

for name in newArray:
   if name == a:
      newArray.remove(name)

print newArray
于 2017-05-05T10:13:55.380 回答