繁体   English   中英

为什么我得到列表索引超出范围错误?

[英]Why am I getting a list index out of range error?

我不知道为什么我收到以下错误:

builtins.IndexError: list index out of range 

在以下行(第5行):

C[A[key(a)]] == C[A[key(a)]] + 1

此代码的输入示例为A = [2, -2, 1]key = lambda x: x**2 ,并且在第4-5行的循环中,它采用A[a]处的项的键A[a]作为数组C的选择索引,并将该索引处的值递增1 例如: C[A[key(0)]]C[4]0 ,并且递增为1

def key_positions(A, key):
    k = key(max(A, key = key))
    C = [0] * (k+1)
    for a in A:
        C[A[key(a)]] == C[A[key(a)]] + 1
    for i in range(0, k):
        sum = C[i]
    return C

您正在尝试将key(a)视为列表A的索引。 akey(a)都不是[0, len(A)]范围内的有效索引。

如果你想计算key(a)出现次数, 只需将其直接用作C的索引:

def key_positions(A, key):
    k = key(max(A, key = key))
    C = [0] * (k+1)
    for a in A:
        C[key(a)] += 1
    for i in range(0, k):
        sum = C[i]
    return C

我在这里使用+=增强赋值而不是更详细的C[key(a)] = C[key(a)] + 1 ; 这样可以节省每次重复执行key()函数的时间。

计算最大k值也更简单:

k = max(key(a) for a in A)

接下来,你的sum = C[i]循环也是荒谬的; 循环是多余的,因为你没有使用sum ,你可以使用sum = C[-1]来完成循环。

原因是您使用超出列表A范围的索引访问列表A = [2,-2,1]。

对于第一个for循环的每次迭代,您计算a的平方(通过您的键lamba),这会导致索引错误。

您必须确保不访问索引值大于列表A大小的列表A.

例如:

for a in A: 
  # key(a) will be 4, 4, 1
  # but for key(2) it will be 4
  # and larger than the list A.
  C[A[key(a)]] == C[A[key(a)]] + 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM