python列表索引超出范围

时间:2014-11-13 20:26:45

标签: python python-2.7

您好,这是我第一次来这里!

作为一个赋值我得到了这个:现在创建一个新函数cumulative_sum,它返回一个新列表,其中第i个元素是原始列表中第一个i + 1个元素的总和。例如,[4,3,6]的累积和是[4,7,13]。

所以我写了这段代码:

list_1 = [4, 6, 3]

def cumulative_sum(a_list):
    list_2 = []
    list_2.append(a_list[0])
    x = 1
    y = 0
        for i in a_list:
            if len(a_list) == x:
               break
            else:
                var1 = list_2[x]
                var2 = a_list[y]
                var3 = var1 + var2
                list_2.append(var3)
                x +=1
                y +=1
                return list_2
print cumulative_sum(list_1)

但是我仍然得到一个索引超出范围的错误,即使我有一个绑定检查,如:

        if len(a_list) == x:
        break

原谅我的英语!我欢迎任何有关我的代码的其他提示

这是追溯:

 IndexError                                Traceback (most recent call last)
 /Applications/Canopy.app/appdata/canopy-1.4.1.1975.macosx-x86_64/Canopy.app/Contents/lib/python2.7/site-packages/IPython/utils/py3compat.pyc in execfile(fname, *where)
202             else:
203                 filename = fname
--> 204             __builtin__.execfile(filename, *where)

/Users/arkin/programming/multadd.py in <module>()
 97             return list_2
 98 
---> 99 print cumulative_sum(list_1)
100 
101 

/Users/arkin/programming/multadd.py in cumulative_sum(a_list)
 89             break
 90         else:
---> 91             var1 = list_2[x]
 92             var2 = a_list[y]
 93             var3 = var1 + var2

4 个答案:

答案 0 :(得分:4)

您无法将元素分配到尚不存在的索引的列表中。您应该使用append来执行此操作。

def cumulative_sum(l):
    total = 0          # initialize the total to zero
    cumulative = []    # initialize an empty list
    for num in l:      # iterate over each number in original list
        total += num   # calculate the cumulative total to this element
        cumulative.append(total)   # append to the cumulative list
    return cumulative

使用您的示例输入和输出

>>> cumulative_sum([4,3,6])
[4, 7, 13]

修改
更简单的方法是使用一些Python库

import itertools
import operator

def cumulative_sum(l):
    return list(itertools.accumulate(l, operator.add))

答案 1 :(得分:1)

除了@ Cyber​​的答案,这是一个很好的,简洁的答案(虽然不是非常pythonic;),回答为什么你的原始代码不起作用:你只需要[x]和{{1}当您提取[y]var1的值时,会翻转下标。否则它实际上工作正常。这是您更正后的代码:

var2

答案 2 :(得分:1)

另一个:

def cumulative_sum(lst):
    new_lst = []
    for i in range(len(lst)):
        new_lst.append(sum(lst[:i + 1]))
    return new_lst

切片没有这个索引超出限制的问题。

答案 3 :(得分:0)

这个怎么样

s = [4,5,6]

y = []

for i in s:

    if s.index(i) == 0:
       y.append(i)
    else:
       t = y[len(y) -1] + i;
       y.append(t)

>>> y
[4, 9, 15]

Simples!