为什么我的forloop索引给indexer:list赋值索引超出范围?

2024-06-16 09:48:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图让一个函数把数组和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

Tags: 函数in消息forlendef错误range
3条回答

这条线应该可以修复它:

z = [0] * len(element)

后来:

for k in range(1, len(element)):

正如罗纳德指出的。你知道吗

试试这个:

您不需要在for循环的range函数中向len(element)添加一个,因为range将从零开始并上升到len(element)-1,添加一个将使其变为indexootfrange:

例如

    l = [1,2,3]

    print(len(l))

3


    for i in range(len(l)):
        print(i)


0
1
2

    for i in range(len(l)+1):
        print(i)


0
1
2
3

    for i in range(len(l)):
        print(l[i])


1
2
3

    for i in range(len(l)+1):
        print(l[i])


1
2
3

    Traceback (most recent call last):
      File "<pyshell#23>", line 2, in <module>
        print(l[i])
    IndexError: list index out of range

你有for k in range(1, len(element) + 1):

假设element在它的列表中有N个项,这样len(element) == N。在Python中,列表的第一个元素是element[0],最后一个元素是element[N - 1]。但是你让k取1,2。。。当k为N时,索引器中会出现异常。你知道吗

您应该将语句更改为:

for k in range(1, len(element)):

相关问题 更多 >