【问题标题】:Don't understand why my code giving me an IndexError不明白为什么我的代码给了我一个 IndexError
【发布时间】:2019-11-03 19:09:19
【问题描述】:

如果我做错了什么很明显,我很抱歉,但我似乎无法理解为什么我的代码给了我一个超出范围的索引错误。我是初学者,所以请放轻松。

import statistics
z_alpha = [2,4,4,6,3]
z_beta = [5,6,8,9,2]
z_gamma = [4,6,6,8,2]
z_delta = [5,6,3,1,1]
def Stats():
     average_red = []
     st_dev =[]
     i = 0
     while i<=5:
          added_zs = z_alpha[i] + z_beta[i] + z_gamma[i] + z_delta[i]
          average_z = float(added_zs/4)
          average_red.append(average_z)
          standard = [z_alpha[i], z_beta[i], z_gamma[i], z_delta[i]]
          final_calc_dev = statistics.stdev(standard)
          st_dev.append(final_calc_dev)
          i+=1
     return average_red, st_dev

print(Stats()[0])
print(Stats()[1])

我的错误是:

Traceback (most recent call last):
  File "c:/Users/pedro/Desktop/Py projects/Wave_test.py", line 22, in <module>
    print(Stats()[0])
  File "c:/Users/pedro/Desktop/Py projects/Wave_test.py", line 13, in Stats
    added_zs = z_alpha[i] + z_beta[i] + z_gamma[i] + z_delta[i]
  IndexError: list index out of range

【问题讨论】:

  • 因为您的列表中只有五个元素,其中第一个由0 索引,最后一个由4 索引。请记住,Python 是一种 0 索引编程语言

标签: python list statistics average standard-deviation


【解决方案1】:

在您的while 循环中,您使用i&lt;=5。 Python 列表从索引0 开始,这意味着具有5 个元素的列表的索引值将从0 变为4。将i&lt;=5 替换为i&lt;5,它应该可以工作。

另外,只是一个提示:在这种情况下,for 循环可能比while 循环工作得更好。像这样:

for i in range(0,5):
    # code goes here

这样做是遍历0(包括)和5(不包括)之间的所有整数,所以它会从04,这就是你想要的。

【讨论】:

    【解决方案2】:

    使用 zip 可能比摆弄索引更好。

    用途:

        for a,b,g,d in zip(z_alpha, z_beta, z_gamma, z_delta):
              added_zs = a + b + g + d
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      相关资源
      最近更新 更多