Python中的索引超出范围错误

时间:2015-10-26 20:28:47

标签: python indexing

我的change_array [i] + = 0和change_array [i] + = roc,我一直收到错误说“列表索引超出范围”。我也尝试过使用'=',但这也不起作用。

   #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 

3 个答案:

答案 0 :(得分:1)

我假设您要向change_array添加元素,如果是,则需要使用change_array.append(your_element)

答案 1 :(得分:0)

change_array = []是一个空数组,因此没有0元素。 0元素是数组中的第一个元素。

array = ["one", "two"]

array[0]是"一个",array[1]是"两个"

答案 2 :(得分:0)

@Ekinydre给了你一个很好的解决方案,但我只是想详细说明你得到的错误。

当您有change_array = [1, 2, 3]之类的列表时,change_array[i]访问了元素i(在Python中列出了使用0的索引)。此外,Python中的+=不是追加运算符,而是增量运算符。因此change_array[i] += 10您要将10添加到位置i的列表元素中。

正如@Ekinydre建议的那样你可以appendchange_array,但是考虑到你的代码,可能会更安全(尽管不那么pythonic)做类似以下的事情:

#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

稍微更加pythonic的方式可能如下所示:

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

注意:最后一个解决方案在change_array的开头不会有初始值0。