我写了一个函数来查找列表的标准偏差:
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]它说“浮动对象不可迭代”。问题在哪里,如果不解决这些函数的整数结果,我可以解决它吗?
答案 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))