2016-01-14 101 views
-1

該代碼應該從現有列表x中創建一個新列表m'i'元素的算術平均值

每個元素m[i]應該是xi元素的算術平均值,但我無法以任何方式使其工作。

def mari(x): 
    m = [] 
    i = 0 
    for i in range(1,len(x)): 
     m[i]=((sum(x[i])/i+1)) 
     i = i+1 
    return m 
x = [1, 2, 3, 4, 5] 
print mari(x) 

TypeError: 'int' object is not iterable

是什麼,似乎,以防止它的工作。

+0

那麼,對於一兩件事,'I = I + 1 '你不要像那樣修改循環索引。它會自動處理它。 'sum(x [i])'你試圖總結一個數字。 –

回答

0

最簡單和最有效的方法是分開保存輸入列表的元素的總數和數量。然後算術平均值,如果只是當前的總和除以當前計分:

def mari(x): 
    s = 0.0 # current sum 
    cnt = 0 # current count 
    m = [] # list to return 
    for i in x: 
     s += i 
     cnt += 1 
     m.append(s/cnt) 
    return m 
0

根據你的代碼,你可以試試這個:

def mari(x): 
    m = [] 
    m.append(x[0]) 
    for i in range(1,len(x)): 
      m.append((sum(x[0:i+1]))/(i+1)) 
    return m 

x = [1, 2, 3, 4, 5] 
print mari(x)