Python indexer程序从lis中删除名称

2024-05-14 19:55:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名单,我想删除一个可选的名字,但下面的行

if newArray[i]==a:

上面写着“索引器错误:列表索引超出范围”

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]   

Tags: toin列表if错误delete名字john
3条回答

您不需要for循环:

>>> newArray = ['John','Alex','Sophia','Rick']
>>> a = 'Alex'
>>> newArray.index(a)
1
>>> del newArray[newArray.index(a)]
>>> newArray
['John', 'Sophia', 'Rick']

不要同时迭代并从列表中删除元素。你知道吗

最好这样做:

>>> 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']

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

一个更为python的方法可能是使用列表理解。你知道吗

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

但是对于长列表,它可能比.index()方法慢(尽管我不打算分析它并查看它)。你知道吗

相关问题 更多 >

    热门问题