Итерация по массивам в 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