2014-11-13 11 views
1

안녕하세요, 여기가 처음입니다!비단뱀 목록 색인 바깥 쪽

할당 : 여기에 i 번째 요소가 원래 목록의 처음 i + 1 요소의 합계 인 새 목록을 반환하는 새 함수 cumulative_sum을 만듭니다. 예를 들어 [4, 3, 6]의 누적 합계는 [4, 7, 13]입니다.

은 그래서 나는이 코드를 작성했습니다 :

 if len(a_list) == x: 
     break 

변명 내 영어 :

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) 

그러나 나는 내가 좋아 바운드 검사를하더라도 바인딩 오류 밖으로 인덱스를 점점 계속! 당신은 아직 존재하지 않는 인덱스리스트에 요소를 할당 할 수 없습니다

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

: 내 코드의 다른 끝은

환영이 역 추적입니다. 이를 수행하려면 append을 사용해야합니다. 귀하의 예를 입력 및 출력

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

편집
이 작업을 수행하는 짧은 방법으로

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 

import itertools 
import operator 

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

is이 방법이 더 짧은 방법일까요? 이 목록은 모든 목록에서 작동합니까? 도와 줘서 고마워! –

+1

예 짧은 방법으로 작성하겠습니다. 필자는 비교적 새로운 방식의 파이썬이므로 처음부터 단계별로 작성하고 싶었습니다. 네, 모든 숫자 목록에서 작동합니다. – CoryKramer

+0

+1은 간결한 답변이며 python의 변형은 upvote입니다! – cod3monk3y

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!

1

원본 코드가 작동하지 않는 이유에 대한 답변을 제공하는 위대한 간결한 답변 인 @ Cyber ​​'s answer 외에도 다음을 추출했을 때 [x][y] 하위 문자를 간단히 뒤집어 썼습니다. var1var2에 대한 값 그렇지 않으면 실제로 작동했습니다.

def cumulative_sum(a_list): 
    list_2 = [] 
    list_2.append(a_list[0]) 

    x = 1 
    y = 0 

    for i in a_list: 
     print x,y,i    # added for debugging purposes 

     if len(a_list) == x: 
      break 
     else: 
      var1 = list_2[y] # your code had [x] here 
      var2 = a_list[x] # your code had [y] here 
      var3 = var1 + var2 

      list_2.append(var3) 
      x +=1 
      y +=1 

    return list_2 


print cumulative_sum([4,3,6]) # outputs [4, 7, 13] 
+1

대단히 감사합니다 !! –

1

또 다른 하나 :

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

슬라이스가 결합 된 문제 중이 인덱스가없는 다음은 수정 된 코드입니다.