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

2024-09-30 18:23:56 发布

您现在位置: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

Tags: 代码lenif字典错误数字resultelse
3条回答

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

while j <= len(rankedlen):

改变<;=至<

向代码中添加一些打印:

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}

相关问题 更多 >