这个简单的代码只是编译数字字典。当'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
答案 0 :(得分:0)
'<='运算符包括'j'= len(rankedlen)。这意味着在列表的末尾,“ j”超出范围。请记住,列表的长度可能是'x',但是同一列表的最后一个索引是'x-1'。
答案 1 :(得分:0)
在代码中添加一些图片:
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 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}
答案 2 :(得分:0)
而j <= len(rankedlen):
将<=更改为<< / strong>