【发布时间】:2020-04-29 17:36:07
【问题描述】:
问题是: 给你一个清单。打印列表编号的总和。如果列表为空,则打印 0。此外,元素 7 和它旁边的元素不会对总和做出贡献。
def realSum(arr):
if len(arr) == 0:
return 0
for i in range(len(arr)-1):
if arr[i] == 7:
del arr[i:i+2]
return sum(arr)
为什么这段代码给我这个错误:
Traceback (most recent call last):
File "C:/Users/welcome/PycharmProjects/ko/ko.py", line 16, in <module>
print(realSum(arr))
File "C:/Users/welcome/PycharmProjects/ko/ko.py", line 11, in realSum
if arr[i] == 7:
IndexError: list index out of range
此代码在使用 while 循环时有效,但在使用 for 循环时无效。 为什么会这样?
【问题讨论】:
-
请注意,
range(len(arr)-1)在循环开始之前执行一次。每次迭代都不会“检查”。 -
不要修改你正在迭代的列表,你会有各种各样的副作用。
-
等等,你只是想得到一个列表的总和?
-
@Carcigenicate 真的很抱歉,您能详细说明一下吗?
-
每次调用
del,列表都会变短,但您仍在迭代,直到i成为arr的原始长度。如果您删除任何元素,这将超出范围。
标签: python list error-handling