我是python的新手,在了解为什么这段代码不能工作时遇到了问题。我希望它返回10,122,2。
close = [5000,5010,5132,5134]
def difference():
x = 0
data = []
while x < len(close):
diff = close[x+1]-close[x]
data.append(diff)
x = x + 1
return data它返回"IndexError: list index out of range“,但我的理解是while循环只有在满足条件时才会运行。我遗漏了什么?谢谢
发布于 2013-05-17 17:39:58
您将x限制为小于len(close),但是列表的最后一个索引是len(close) - 1 (基于0的索引)。这意味着在循环的最后一次迭代中,x + 1将等于len(close)并且超出界限。
这是可行的:
while x < len(close) - 1:
diff = close[x+1]-close[x]
data.append(diff)
x = x + 1您的代码也可以简化为:
data = [elem - close[i - 1] for i, elem in enumerate(close) if i]下面是列表的理解:
索引循环遍历close.
i和元素索引close中当前元素与前一个元素之间的差异(使用
0,从而有效地跳过close.中没有前面元素的元素
演示:
>>> close = [5000,5010,5132,5134]
>>> [elem - close[i - 1] for i, elem in enumerate(close) if i]
[10, 122, 2]发布于 2013-05-17 17:41:12
看看这个:close[x+1]
这就是问题所在。实际上,根据您编写的条件,x将始终是一个有效的索引。但在最后的迭代中,您会发现x+1并非如此。如果您希望避免超出此行的范围,则必须从要检查的最大值中减去1。
https://stackoverflow.com/questions/16605916
复制相似问题