[英]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
的索引。 a
和key(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.