我是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
Run Code Online (Sandbox Code Playgroud)
它返回"IndexError:list index out of range"但我的理解是while循环仅在满足条件时运行.我错过了什么?谢谢
限制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
Run Code Online (Sandbox Code Playgroud)
您的代码也可以简化为:
data = [elem - close[i - 1] for i, elem in enumerate(close) if i]
Run Code Online (Sandbox Code Playgroud)
这个列表理解:
close.enumerate()为每个元素生成索引,为我们提供索引i和元素elem.close(使用索引-1),除非索引是0,有效地跳过没有前一个元素的一个元素close.演示:
>>> close = [5000,5010,5132,5134]
>>> [elem - close[i - 1] for i, elem in enumerate(close) if i]
[10, 122, 2]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
574 次 |
| 最近记录: |