3 回答
TA贡献1850条经验 获得超11个赞
“<=”运算符包括“j”= len(rankedlen)。这意味着在列表末尾,“j”超出范围。请记住,列表的长度可能是“x”,但同一列表的最后一个索引是“x-1”。
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}
添加回答
举报