存在列表项检查

时间:2015-02-10 08:08:51

标签: python list

我真的不明白为什么这个代码

a = [1,2,3,4,5,6,7,8,9]

while a[0]:
    a.remove(a[0])

print(a)

不起作用。我收到的消息是#34;列表索引超出范围"。但是,Python没有检查是否首先在列表中有一个项目? 感谢

3 个答案:

答案 0 :(得分:4)

想想当你的清单为空时会发生什么:

a = []

然后你有:

while a[0]:

但是......列表是空的,你将超出范围,例如:

a = [1,2,3]

while a[0]:
    a.remove(a[0])

    # first iteration: a = [2, 3]
    # second iteration: a = [3]
    # third iteration: a = []
    # fourth iteration: out of bounds since there's no a[0]

解决方案:

while a[0]更改为while a

答案 1 :(得分:1)

当检查最后a[0]时,0索引本身超出范围。您可能想要使用len(a)

a = [1,2,3,4,5,6,7,8,9]

while len(a):
    a.remove(a[0])

print(a)

虽然它不会打印[]

以外的任何内容

答案 2 :(得分:1)

运行该代码时会发生的事情是,当a [0](列表a的第一个元素)存在时,你告诉python继续循环。每次循环运行时,从列表中删除当前的第一个元素。在[0]条件下没有更多元素可以删除python抛出异常。 为避免这种情况,您可以执行以下操作:

a = [1,2,3,4,5,6,7,8,9]

try:
    while a[0]:
        print "removing the element:", a[0]        
        a.remove(a[0])
except IndexError:
    print "no more elements to remove."

这将顺利处理错误消息。

或者你可以:

while len(a) > 0:

只有在您的列表包含至少一个元素时才会运行。

请注意,尝试打印您正在执行的操作通常可以帮助您调试代码。

您可以阅读此discussion