我真的不明白为什么这个代码
a = [1,2,3,4,5,6,7,8,9]
while a[0]:
a.remove(a[0])
print(a)
不起作用。我收到的消息是#34;列表索引超出范围"。但是,Python没有检查是否首先在列表中有一个项目? 感谢
答案 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: