IndexError: Как получается, что этот индекс выходит за пределы диапазона, несмотря на то, что он, по-видимому, выстраивается правильно?

#python

Вопрос:

Я пытался использовать цикл for для заполнения массива, используя возвращаемое значение из другой функции.

 def test_weights():
    w1 = 0.25
    w2 = 0.5
    w3 = 0.75
    w4 = 1
    w5 = 1.25
    weights = [w1, w2, w3, w4, w5]
    mse_array = []

    for i in range(len(weights)):
        mse_array[i] = prob3(weights[i])
 

Компилятор вернул

mse_array[i] = prob3(веса[i])

Ошибка индекса: индекс назначения списка выходит за пределы диапазона

Я не уверен, как это выходит за рамки, так как я начинаю с 0, он должен правильно выстраиваться с массивами и не выходить за рамки, так как это диапазон len(весов).

prob3(x) — это функция, которая возвращает значение с плавающей точкой при задании значения. В чем может быть проблема? Спасибо!

Комментарии:

1. Лучше использовать for weight in weights , если вам не нужен индекс списка, или использовать for index, weight in enumerate(weights) , если вам нужен индекс, чем использовать for i in range(len(weights)) .

2. Весь ваш код может быть: mse_array = [prob3(x) for x in [0.25, 0.5, 0.75, 1, 1.25]]

Ответ №1:

Пустой список (mse_array) нельзя использовать при использовании индексов. Для работы со списками существует функция добавления (), или вы можете просто использовать обозначение» «, если функция также возвращает список

 def test_weights():
    w1 = 0.25
    w2 = 0.5
    w3 = 0.75
    w4 = 1
    w5 = 1.25
    weights = [w1, w2, w3, w4, w5]
    mse_array = []

    for i in range(len(weights)):
        mse_array.append(prob3(weights[i])) ## modified line