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

这段简单的代码只是编译一个数字字典。当'j'被分配0开始时,while循环抛出一个错误,'j'不在'rankedlen'的范围内。有什么问题吗?


result = {}

rankedlen = [1,1,1,1,2,2,2,5,5,5]

v = 0

k = 1

j = 0

while j <= len(rankedlen):

    if rankedlen[j] == k:

        v += 1

        j += 1

    else:

        result[k] = v

        k += 1

        v = 0


Qyouu
浏览 65回答 3
3回答

慕盖茨4494581

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

当年话下

当 j <= len(rankedlen) 时:将 <= 更改为 <

阿晨1998

在您的代码中添加一些打印:print(len(rankedlen))while j <= len(rankedlen):&nbsp; &nbsp; print(' j ',j,' v ',v,' k ',k)产生:1907:~/mypy$ python3 stack64148094.py&nbsp;10&nbsp;j&nbsp; 0&nbsp; v&nbsp; 0&nbsp; k&nbsp; 1&nbsp;j&nbsp; 1&nbsp; v&nbsp; 1&nbsp; k&nbsp; 1&nbsp;j&nbsp; 2&nbsp; v&nbsp; 2&nbsp; k&nbsp; 1&nbsp;j&nbsp; 3&nbsp; v&nbsp; 3&nbsp; k&nbsp; 1&nbsp;j&nbsp; 4&nbsp; v&nbsp; 4&nbsp; k&nbsp; 1&nbsp;j&nbsp; 4&nbsp; v&nbsp; 0&nbsp; k&nbsp; 2&nbsp;j&nbsp; 5&nbsp; v&nbsp; 1&nbsp; k&nbsp; 2&nbsp;j&nbsp; 6&nbsp; v&nbsp; 2&nbsp; k&nbsp; 2&nbsp;j&nbsp; 7&nbsp; v&nbsp; 3&nbsp; k&nbsp; 2&nbsp;j&nbsp; 7&nbsp; v&nbsp; 0&nbsp; k&nbsp; 3&nbsp;j&nbsp; 7&nbsp; v&nbsp; 0&nbsp; k&nbsp; 4&nbsp;j&nbsp; 7&nbsp; v&nbsp; 0&nbsp; k&nbsp; 5&nbsp;j&nbsp; 8&nbsp; v&nbsp; 1&nbsp; k&nbsp; 5&nbsp;j&nbsp; 9&nbsp; v&nbsp; 2&nbsp; k&nbsp; 5&nbsp;j&nbsp; 10&nbsp; v&nbsp; 3&nbsp; k&nbsp; 5Traceback (most recent call last):&nbsp; File "stack64148094.py", line 9, in <module>&nbsp; &nbsp; 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&nbsp;10&nbsp;j&nbsp; 0&nbsp; v&nbsp; 0&nbsp; k&nbsp; 1&nbsp;...&nbsp;&nbsp;j&nbsp; 8&nbsp; v&nbsp; 1&nbsp; k&nbsp; 5&nbsp;j&nbsp; 9&nbsp; v&nbsp; 2&nbsp; k&nbsp; 5{1: 4, 2: 3, 3: 0, 4: 0}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python