2016-10-27 52 views
1

我需要編寫一個函數,該函數需要一個數字數組並找到所有數字的最大總和。換句話說,我需要找到正數的總和。我寫了這個,我得到「名單超出範圍」python函數來找到數組中的正數的總和

想法?

def maximum_sub(A): 
     x = 0 
     i = 0 
     for i in A: 
      while A[i] > 0: 
      x+=A[i] 
      i+=1 
     return x 
+1

對於您的'for'循環。在寫'while'之前,你是否嘗試打印'i'來看看它實際上在做什麼? – idjaw

+1

當你爲'我在'A',**我**是**不是**索引,但列表中的項目 - 這是一個提示... – coder

+0

而不是while,你可能想與'if '。考慮編碼者的評論,並看看你的縮進。 – Greenstick

回答

2

使用超強功能和列表理解來代替:

>>> a = [1, 2, 3, -4, 5, -3, 7, 8, 9, 6, 4, -7] 
>>> sum(x for x in a if x > 0) 
45 

[x for x in a if x > 0]將創建a所作的積極值的數組。

sum(...)將返回該數組中元素的總和。

+0

運作良好,但對於= [2,-1,2,3,4,-5]我得到11而不是10 .. – SHirsch

+0

好吧,沒關係。因爲2 + 2 + 3 + 4是11.所以,答案是錯誤的。謝謝! – SHirsch

+1

@UrielEli,很好的答案,但爲什麼你不只是這樣做:'總和(我爲我如果我> 0)'? ...還有'[0]'你不需要它 – coder

4

有總結和理解的更好的方法,但我會假設你正在寫一個函數作爲算法的練習。

你不需要while循環。使用if來檢查它是否爲正數,並將其添加到總和中。否則,不要做任何事情。 for循環會自動迭代你的值。

def maximum_sum(A): 
    x = 0 
    for i in A: 
     if i > 0: 
      x += i 
    return x 

幾句話的建議:表達意思。以下是我可能使用的一些名稱:

def maximum_sum(arr): 
    max_sum = 0 
    for num in arr: 
     if num > 0: 
      max_sum += num 
    return max_sum 
+0

非常感謝你,非常好的建議! – SHirsch

+0

作爲第二個示例使用'max_sum'的簡短解釋:sum本身是Python中的內置函數,通常不希望覆蓋內置函數。 – xZise