解决错误:";列表索引超出范围“;用Python
该代码为所有测试用例提供了正确答案,但当我输入一个列表(如[1,2,3,4,5])时除外。然后它显示: 索引器错误:列表索引超出范围 为什么会这样?结尾的解决错误:";列表索引超出范围“;用Python,python,index-error,Python,Index Error,该代码为所有测试用例提供了正确答案,但当我输入一个列表(如[1,2,3,4,5])时除外。然后它显示: 索引器错误:列表索引超出范围 为什么会这样?结尾的else语句不应该考虑这个问题吗 def func(n): my_list = n.split() l = [] for i in my_list: l.append(int(i)) if len(l)==0 or len(l)==1: return None fo
else
语句不应该考虑这个问题吗
def func(n):
my_list = n.split()
l = []
for i in my_list:
l.append(int(i))
if len(l)==0 or len(l)==1:
return None
for k in range(0, len(l)):
if l[k+1] >= l[k] + 2:
return l[k+1]
else:
return None
n = input()
print(func(n))
错误出现在此处:
for k in range(0,len(l)):
if l[k+1]>=l[k]+2:
return l[k+1]
else:
return None
因为您最多迭代k=len(l)-1
,所以上一次迭代的k+1
将是len(l)
,这是超出范围的。相反,您应该将的更改为:
for k in range(0, len(l) - 1):
...
现在,上一次迭代中k+1
的值将是len(l)-2+1=len(l)-1
,它在l
的范围内,是else
的缩进,如问题所述?如果l[k+1]
中的k+1
条件超出范围,请使用try
,捕捉
,并且除了
用于错误处理。对于范围(0,len(l))中的k,k将从0变为len(l)-1。当k等于len(l)-1时,如果l[k+1]>=l[k]+2:
,这会导致l[k+1]超出中的范围。您能指定要键入的确切输入吗?因为我不能重现你的错误,我也不希望能够重现。您永远不会重复列表的末尾,因为您总是在if
/else
中的任一分支之后返回。这可能不是您真正想要的,但您不应该得到索引器。请确保这是一个完整的文件。如果你的代码不能复制,那对我们没什么好处!虽然您描述的是代码中的错误,但它实际上不可能发生在问题中编写的代码版本中,因为它总是在第一次迭代时返回。