2014-02-17 118 views
0

我寫了一個函數來查找列表的標準偏差:「浮點對象不可迭代」?

def avg(L): 
    return sum(L)/len(L) 

def stdDev(L): 
    for i in range(len(L)-1): 
     return sqrt((sum(L[i]-avg(L)))**2)/len(L)) 

如果我跑這一點,並給殼牌輸入[20,10,30]它說:「浮動對象不是可迭代」 。問題在哪裏,我可以解決它而不解決這些函數的整數結果嗎?

回答

1

sum(L[i]-avg(L)) - 在這裏你有一個浮點數。

你也有return語句循環的每一遍,這顯然是錯誤的。

標準偏差的公式也不正確,因爲您錯位了大括號。

我相信你想要的東西:

def stdDev(L): 
    s = 0 
    for i in range(len(L)): 
     s += (L[i] - avg(L))**2 
    return sqrt(s/len(L)) 

更好的通過比指數的元素進行迭代:

for x in L: 
     s += (x - avg(L))**2 

def stdDev(L): 
    ave = avg(L) 
    s = sum((x - ave)**2 for x in L) 
    return sqrt(s/len(L)) 
+0

感謝您的幫助的人。 – user3317405