IndexError;列表索引超出范围。列表中有项目,0超出范围

时间:2020-10-01 02:04:04

标签: python

这个简单的代码只是编译数字字典。当'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

3 个答案:

答案 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>