IndexError:使用变量索引进行索引时列出索引超出范围

时间:2018-03-11 14:01:25

标签: python

def adjacentElementsProduct(inputArray):
    i = 0
    n = []
    t = int(0)
    b = int(1)
    while i < len(inputArray):
        noob = inputArray[t] * inputArray[b]
        t += 1
        b += 1
        i += 1
        n.append(noob)
    return n

print(adjacentElementsProduct([3, 6, -2, -5, 7, 3]))

当我尝试执行此返回

时,有人可以帮助我吗?
IndexError: list index out of range

抱歉我的英语语法不好

4 个答案:

答案 0 :(得分:0)

您需要更改循环,以便i仅迭代len(inputArray) - 1

像这样:

def adjacentElementsProduct(inputArray):
    i = 0
    n = []
    t = 0
    b = 1
    while i < len(inputArray) - 1:
        noob = inputArray[t] * inputArray[b]
        t += 1
        b += 1
        i += 1
        n.append(noob)
    return n

print(adjacentElementsProduct([3, 6, -2, -5, 7, 3]))

这是因为您的noob数组基本上只是inputArray中每个相邻的元素对。当然,listi元素中的对数是i - 1。这意味着您需要更改循环以停止一次迭代,因为当IndexErrortlen(inputArray) - 1b时,它会抛出len(inputArray) {1}} {b在当前代码的最后一次迭代中不是有效值,因为没有那么多元素。

答案 1 :(得分:0)

l=[3, 6, -2, -5, 7, 3]
print([x*y for x,y in zip(l,l[1:])])

此处zip用于创建邻接对

答案 2 :(得分:0)

在此设置i=0t=0b=1,因此您的b始终大于i 1.因此,在最后一个循环中(其中ti应该等于len(inputArray) -1),b的值应为len(inputArray),大于数组的长度。
我不太确定你的例外输出,但我想你可以解决它如下:

while i < len(inputArray) - 1:
    noob = inputArray[t] * inputArray[b]
    t += 1
    b += 1
    i += 1
    n.append(noob)

答案 3 :(得分:0)

您可以更改while循环的for循环,并使用try / except在结果到达迭代结束时返回结果。您还可以添加额外的except子句来捕获其他错误,并在需要时使用elsefinally .. https://docs.python.org/3/tutorial/errors.html

def adjacentElementsProduct(inputArray):
    i = 0
    n = []
    t = int(0)
    b = int(1)
    for i in range(len(inputArray)):
        try:
            noob = inputArray[t] * inputArray[b]
            t += 1
            b += 1
            i += 1
            n.append(noob)

        except IndexError:
            return n
    return n

print(adjacentElementsProduct([3, 6, -2, -5, 7, 3]))