2015-10-26 2 views
0

Я продолжаю получать сообщение об ошибке «индекс индекса вне диапазона» для моего change_array [i] + = 0 и change_array [i] + = roc. Я также пытался использовать «=», и это тоже не работает.Ошибка индекса вне диапазона в Python

#define variables for a loop 
    change_array = [] 
    roc = 0 

    #iterate to find the change percentage 
    for i in range (0, end_year_index+1): 
     if i == 0: 
      change_array[i] += 0 
     else: 
      roc = ((population[i] - population[i-1])/ (population[i-1])) 
      change_array[i] += roc 
+0

Я думаю, что 'change_array' должно быть' [0 для _ в диапазоне (end_year_index + 1)] ', если вы хотите, чтобы для каждого индекса добавлялся нуль. Вы не можете индексировать произвольно в список Python или вообще с пустым списком. – jonrsharpe

+0

Любопытно, что вы, вероятно, могли бы сделать то, что хотели, просто сделав словарь 'change_array'. –

+0

@JeremyKemball a defaultdict (int) ', конечно. – jonrsharpe

ответ

0

change_array = [] является пустой массив, поэтому нет 0 элемента. Элемент 0 - это первый элемент массивов.

array = ["one", "two"] 

array[0] является «один», array[1] это «два»

1

Я предполагаю, что вы хотите, чтобы добавить элементы в change_array, если да, то вам нужно использовать change_array.append(your_element).

+0

ответы не должны основываться на предположениях. пусть сначала задает вопрос о ясном вопросе. – CrakC

0

@ Ekinydre дал вам хорошее решение, но я просто хотел уточнить полученную вами ошибку.

Если у вас есть список change_array = [1, 2, 3], то change_array[i] Доступ к элементу i (списки используют индексы на основе 0 на Python). Кроме того, += в Python не является оператором append, а оператором инкремента. Итак, change_array[i] += 10 вы добавляете 10 к элементу списка в позиции i.

Вы можете просто append к change_array как предполагает @Ekinydre, но данный код может быть безопасным (хотя и менее вещий), чтобы сделать что-то вроде следующего:

#define variables for a loop 
#create a list of 0 of length end_year_index 
change_array = [0]*end_year_index 
roc = 0 

#iterate to find the change percentage 
for i in range (0, end_year_index+1): 
    if i == 0: 
     change_array[i] += 0 
    else: 
     roc = ((population[i] - population[i-1])/ (population[i-1])) 
     change_array[i] += roc 

чуть более вещий образом может выглядеть это:

change_array = [(population[i] - population[i-1])/population[i-1] \ 
        for i in range(1, end_year_index+1)] 

Примечание: это последнее решение не будет иметь начальный 0 в начале change_array.

Смежные вопросы