“浮动对象不可迭代”?

时间:2014-02-17 05:01:22

标签: python iterable

我写了一个函数来查找列表的标准偏差:

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))

如果我运行它并给Shell输入[20,10,30]它说“浮动对象不可迭代”。问题在哪里,如果不解决这些函数的整数结果,我可以解决它吗?

1 个答案:

答案 0 :(得分: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))