在条件循环中列出索引超出范围

时间:2015-11-25 23:35:37

标签: python list loops python-3.x

n = input("How many average temperatures do you want to put in?" + "\n").strip()
temperatures = []
differences = []
diff = 0

print('')
if int(n) > 0 :
    for x in range (int(n)):
        temp = input("Input a average temperature: " + "\n").strip()
        temperatures.append(int(temp))

    for y in range(len(temperatures)):
        if y == len(temperatures):
            break
        diff = temperatures[y+1] - temperatures[y]
        differences.append(diff)

    print(differences)

在此行上获取列表索引超出范围错误:

diff = temperatures[y+1] - temperatures[y]

这一行基本上找到了我的列表中2个数字之间的差异,所以我告诉它采取前面的数字索引并从之前的数字中减去它。我最终弄清楚当它到达最后一个数字时,[y + 1]最终超出范围,所以在循环开始时我把条件当它到达最后一个数字时将突破循环在列表中。

但由于某些原因,我仍然得到指数超出范围错误,而且我不明白它为什么会发生。谁能指出我哪里出错了?

2 个答案:

答案 0 :(得分:1)

问题在于:

diff = temperatures[y+1] - temperatures[y]

y到达temperatures中的最后一个有效索引时,表达式y+1将导致列表之外的索引,从而导致错误。改为定义这样的循环:

for y in range(len(temperatures)-1):
    diff = temperatures[y+1] - temperatures[y]
    differences.append(diff)

通过这种方式,我们不会走出温度列表。另请注意,这些行没有按照您的想象进行,可以删除:

if y == len(temperatures):
  break

这是因为range()从零到len(temperatures) - 1,所以y永远不会等于len(temperatures),这就是为什么你得到一个超出范围的索引错误。

答案 1 :(得分:0)

啊,这有点棘手。下面,我已经写出了一个示例列表和该列表的索引。

a = [1, 56, 84, 32, -9]
     0   1   2   3   4

但是...列表的长度不是4,而是5.因此,a[len(a)](相当于a[5])将失败并显示IndexError。此外,range(len(temperatures))本身不会包含len(temperatures),因此if条件永远不会为真 。在代码的这一部分中,

for y in range(len(temperatures)):
    if y == len(temperatures):
        break
    diff = temperatures[y+1] - temperatures[y]
    differences.append(diff)

您需要将if y == len(temperatures):更改为if y == len(temperatures)-1,这是更好的选择,完全取出if条件并将循环更改为:

for y in range(len(temperatures)-1):
    diff = temperatures[y+1] - temperatures[y]
    differences.append(diff)