2014-02-17 92 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