为了账号安全,请及时绑定邮箱和手机立即绑定

索引错误;列表索引超出范围。列表有项目,0 超出范围

索引错误;列表索引超出范围。列表有项目,0 超出范围

Qyouu 2023-09-26 16:27:31
这段简单的代码只是编译一个数字字典。当'j'被分配0开始时,while循环抛出一个错误,'j'不在'rankedlen'的范围内。有什么问题吗?result = {}rankedlen = [1,1,1,1,2,2,2,5,5,5]v = 0k = 1j = 0while j <= len(rankedlen):    if rankedlen[j] == k:        v += 1        j += 1    else:        result[k] = v        k += 1        v = 0
查看完整描述

3 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

“<=”运算符包括“j”= len(rankedlen)。这意味着在列表末尾,“j”超出范围。请记住,列表的长度可能是“x”,但同一列表的最后一个索引是“x-1”。



查看完整回答
反对 回复 2023-09-26
?
当年话下

TA贡献1890条经验 获得超9个赞

当 j <= len(rankedlen) 时:

将 <= 更改为 <


查看完整回答
反对 回复 2023-09-26
?
阿晨1998

TA贡献2037条经验 获得超6个赞

在您的代码中添加一些打印:


print(len(rankedlen))

while j <= len(rankedlen):

    print(' j ',j,' v ',v,' k ',k)

产生:


1907:~/mypy$ python3 stack64148094.py 

10

 j  0  v  0  k  1

 j  1  v  1  k  1

 j  2  v  2  k  1

 j  3  v  3  k  1

 j  4  v  4  k  1

 j  4  v  0  k  2

 j  5  v  1  k  2

 j  6  v  2  k  2

 j  7  v  3  k  2

 j  7  v  0  k  3

 j  7  v  0  k  4

 j  7  v  0  k  5

 j  8  v  1  k  5

 j  9  v  2  k  5

 j  10  v  3  k  5

Traceback (most recent call last):

  File "stack64148094.py", line 9, in <module>

    if rankedlen[j] == k:

IndexError: list index out of range

当j达到10时,rankedlen[10]产生此错误。Python 索引范围从 0 到 n-1。


将 while 更改为:


while j < len(rankedlen):

产生:


1909:~/mypy$ python3 stack64148094.py 

10

 j  0  v  0  k  1

 ... 

 j  8  v  1  k  5

 j  9  v  2  k  5

{1: 4, 2: 3, 3: 0, 4: 0}


查看完整回答
反对 回复 2023-09-26
  • 3 回答
  • 0 关注
  • 64 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信