【问题标题】:I have trouble finding out why I got this index out of range error我很难找出为什么我得到这个索引超出范围错误
【发布时间】:2018-11-13 15:35:21
【问题描述】:

我得到了这个代码

lista = list(range(30))
print(lista)
for i in range(0,len(lista)):
    if lista[i]%3 == 0:
        del lista[i]

print(lista)

如果我得到并错误告诉我它超出了我的列表范围。但是,如果 for 循环在此列表的长度范围内,那么每个 i 的列表索引超出范围是没有意义的,因为它只能获取列表长度的值数?

【问题讨论】:

  • 您应该显示错误/堆栈跟踪。另外,你做了什么研究?提示:如果测试通过会发生什么?你在循环中行走的长度是多少,这会改变吗?即使是一些 print() 调试也会有所帮助,但实时 REPL 会有所帮助

标签: python loops indexing error-handling


【解决方案1】:

你不能这样做。如果你在 for 循环中修改列表的大小并修改它的长度,你将不会得到你想要的结果。

假设您可以在大小为size 的列表中删除一个元素。所以突然间lista[size-1] 不起作用,但你仍然会尝试访问它。

那是你的错误。范围是在调用开始时定义的,每次迭代后都不会更新。

正如 mauve 和 Asier ricardo Rafales Vila 所说,解决方案是 lista = [i for i in range(30) if i%3 != 0]。

【讨论】:

  • 我建议做一个列表理解来解决这个问题:lista = [i for i in range(30) if i%3 != 0]
  • 是的,没错,这就是你应该正确编写代码的方式。
【解决方案2】:

您可以通过将不是 3 的倍数的元素添加到新列表来解决此问题 例如:

lista = list(range(30))
print(lista)
new_lst = []
for i in range(0,len(lista)):
    if lista[i]%3 != 0:
        new_lst.append(lista[i])

print(new_lst)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    相关资源
    最近更新 更多