不明白为什么我的代码给了我一个IndexError

时间:2019-11-03 19:09:19

标签: python list statistics average standard-deviation

很抱歉,很明显我在做什么错,但是我似乎无法弄清楚为什么我的代码给我索引超出范围的错误。我是初学者,请放轻松。

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

2 个答案:

答案 0 :(得分:0)

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

还有一点提示:在这种情况下,for循环可能比while循环更好。像这样:

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

此操作将迭代0(包括)和5(不包括)之间的所有整数,因此它将从04,即你想要什么。

答案 1 :(得分:0)

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

使用:

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