Итерация по массивам в Python 3

Я некоторое время не кодировал и пытался вернуться на Python. Я пытаюсь написать простую программу, которая суммирует массив, добавляя каждое значение элемента массива к сумме. Это то, что у меня есть:

def sumAnArray(ar):
    theSum = 0
    for i in ar:
        theSum = theSum + ar[i]
    print(theSum)
    return theSum

Я получаю следующую ошибку:

line 13, theSum = theSum + ar[i]
IndexError: list index out of range

Я обнаружил, что то, что я пытаюсь сделать, очевидно, так просто:

sum(ar)

Но ясно, что я все равно не повторяюсь в массиве, и я считаю, что мне нужно будет учиться правильно для других целей. Спасибо!

Ответ 1

Когда вы зацикливаете массив, как вы, ваша переменная (в этом примере i) является текущим элементом вашего массива.

Например, если ваш ar равен [1,5,10], значение i на каждой итерации равно 1, 5 и 10. И поскольку длина вашего массива равна 3, максимальный индекс, который вы можете использовать, равен 2. Поэтому, когда i = 5 вы получаете IndexError. Вы должны изменить свой код на что-то вроде этого:

for i in ar:
    theSum = theSum + i

Или, если вы хотите использовать индексы, вы должны создать диапазон от 0 до array length - 1.

for i in range(len(ar)):
    theSum = theSum + ar[i]

Ответ 2

Цикл for выполняет итерацию по элементам массива, а не по индексам. Предположим, что у вас есть список ar = [2, 4, 6]:

Когда вы перебираете его for я in ar: значения я будут равны 2, 4 и 6. Итак, когда вы пытаетесь получить доступ к ar[i] для первого значения, это может сработать (в качестве последней позиции списка равно 2, a [2] равно 6), но не для последних значений, поскольку [4] не существует.

Если вы все for index, value in enumerate(ar): намерены использовать индексы, попробуйте использовать for index, value in enumerate(ar): тогда theSum = theSum + ar[index] должен работать нормально.

Ответ 3

Вы можете использовать

    nditer

Здесь я рассчитал нет. положительных и отрицательных коэффициентов в логистической регрессии:

b=sentiment_model.coef_
pos_coef=0
neg_coef=0
for i in np.nditer(b):
    if i>0:
    pos_coef=pos_coef+1
    else:
    neg_coef=neg_coef+1
print("no. of positive coefficients is : {}".format(pos_coef))
print("no. of negative coefficients is : {}".format(neg_coef))

Выход:

no. of positive coefficients is : 85035
no. of negative coefficients is : 36199

Ответ 4

При переборе списка или массива с помощью этого метода:

ar = [10, 11, 12]
for i in ar:
    theSum = theSum + ar[i]

Вы на самом деле получаете значения списка или массива последовательно в переменной i. Если вы печатаете переменную i внутри for loop. Вы получите следующий вывод:

10
11
12

Однако в вашем коде вы путаете переменную i со значением индекса массива. Следовательно, выполнение ar[i] будет означать ar[10] для первой итерации. Что, конечно, является показателем вне диапазона бросков IndexError

Изменить Вы можете прочитать это для лучшего понимания различных методов перебора массива или списка в Python