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
抱歉我的英语语法不好
答案 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
中每个相邻的元素对。当然,list
个i
元素中的对数是i - 1
。这意味着您需要更改循环以停止一次迭代,因为当IndexError
为t
且len(inputArray) - 1
为b
时,它会抛出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=0
,t=0
和b=1
,因此您的b
始终大于i
1.因此,在最后一个循环中(其中t
和i
应该等于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
子句来捕获其他错误,并在需要时使用else
和finally
.. 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]))