【发布时间】:2019-12-30 03:51:23
【问题描述】:
我试图让一个函数将一个数组和 int 作为输入,并在进行一些计算后返回一个相同长度的数组。
我对 Python 完全陌生,可能只是犯了一个非常明显的错误,但我无法自行解决。
错误消息说我超出范围,但我尝试缩短和扩大 for 循环的范围?
def WMA(element, duration):
multiplier = 1 / duration
z = [len(element)]
z[0] = element[0] * multiplier
for k in range(1, len(element) + 1):
z[k] = (element[k] * multiplier) + (z[k - 1] * (1 - multiplier))
return z
错误信息:
IndexError: list assignment index out of range
【问题讨论】:
-
z 只有一个元素,所以不能赋值给 z[k]。
-
... in range(1, len(element) + 1)然后element[k]。您最终将尝试访问element的越界/越界成员。 -
Python(以及除 MATLAB、R 之外的大多数语言)从 0..(L-1) 而非 1..L 索引事物。因此
range(1, len(element) + 1)是错误的,你的意思只是range(len(element))。 -
问题与函数无关,我们不需要函数定义的行来重现问题。 (以后请只发MCVE (minimal, complete, verifiable example))
-
您的行
z = [len(element)]没有多大意义,这肯定是z = [0] * len(element)的拼写错误,这将创建一个指定长度的列表,正如其他人之前指出的那样。可能有人误解/错误转录了该代码。