Не понимаю, почему мой код дает мне IndexError - PullRequest
0 голосов
/ 03 ноября 2019

Извините, если очевидно, что я делаю неправильно, но я не могу понять, почему мой код дает мне ошибку индекса вне диапазона. Я новичок, так что успокойся, пожалуйста.

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 голосов
/ 03 ноября 2019

Использование zip, вероятно, лучше, чем возиться с индексами.

Использование:

    for a,b,g,d in zip(z_alpha, z_beta, z_gamma, z_delta):
          added_zs = a + b + g + d
0 голосов
/ 03 ноября 2019

В вашем цикле while вы используете i<=5. Списки Python начинаются с индекса 0, что означает, что значения индекса списка с 5 элементами будут идти от 0 до 4. Замените i<=5 на i<5, и оно должно работать.

Кроме того, просто подсказка: цикл for, вероятно, будет работать лучше, чем цикл while в этой ситуации. Вот так:

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

То, что нужно сделать, это перебрать все целые числа от 0 (включительно) до 5 (эксклюзив), поэтому он будет переходить от 0 к 4, чтоэто то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...