首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >While循环python

While循环python
EN

Stack Overflow用户
提问于 2013-05-17 17:38:26
回答 2查看 726关注 0票数 3

我是python的新手,在了解为什么这段代码不能工作时遇到了问题。我希望它返回10,122,2。

代码语言:javascript
复制
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循环只有在满足条件时才会运行。我遗漏了什么?谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-05-17 17:39:58

您将x限制为小于len(close),但是列表的最后一个索引是len(close) - 1 (基于0的索引)。这意味着在循环的最后一次迭代中,x + 1将等于len(close)并且超出界限。

这是可行的:

代码语言:javascript
复制
while x < len(close) - 1:
    diff = close[x+1]-close[x]
    data.append(diff)
    x = x + 1

您的代码也可以简化为:

代码语言:javascript
复制
data = [elem - close[i - 1] for i, elem in enumerate(close) if i]

下面是列表的理解:

索引循环遍历close.

  • Uses

  • 中的所有元素,为每个元素生成索引,为我们提供索引i和元素索引close中当前元素与前一个元素之间的差异(使用

  • - 1),除非索引为0,从而有效地跳过close.

中没有前面元素的元素

演示:

代码语言:javascript
复制
>>> close = [5000,5010,5132,5134]
>>> [elem - close[i - 1] for i, elem in enumerate(close) if i]
[10, 122, 2]
票数 7
EN

Stack Overflow用户

发布于 2013-05-17 17:41:12

看看这个:close[x+1]

这就是问题所在。实际上,根据您编写的条件,x将始终是一个有效的索引。但在最后的迭代中,您会发现x+1并非如此。如果您希望避免超出此行的范围,则必须从要检查的最大值中减去1。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16605916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档