3 回答
![?](http://img1.sycdn.imooc.com/5458471300017f3702200220-100-100.jpg)
TA贡献1798条经验 获得超7个赞
只需像这样使用statisticspython 提供的模块:
import statistics
import random
# creating sample data
lst = []
for x in range(0, 5):
n = random.randint(1, 10)
lst.append(n) # also don't add semicolons after lines of code, that's not proper formatting
# Prints standard deviation
print("Standard Deviation of sample is:", statistics.stdev(lst))
如果您不想使用内置函数,请尝试:
# Find the mean
total = 0
for num in lst:
total += num
mean = total/len(lst)
# Subtract mean from each value and square
new_lst = []
new_sum = 0
for item in lst:
square_diff = (item - mean)**2
new_lst.append(square_diff)
# Find the average of all the values
new_lst_sum = 0
for item in new_lst:
new_lst_sum += item
# print results
standard_dev = float(new_lst_sum/len(new_lst))
print("Your standard deviation is:", standard_dev)
这代码更繁重且效率更低,但您可以清楚地看到逻辑。
![?](http://img1.sycdn.imooc.com/545862770001a22702200220-100-100.jpg)
TA贡献1776条经验 获得超12个赞
您最新版本的代码中的错误应该s /= len(ranList)-1是s /= len(ranList). 有几件事需要考虑。首先,不要为测试随机生成列表,而是使用硬编码列表以便于验证。其次,考虑在函数中创建第二个内部列表,这样您就不会破坏传入的列表。
一个解决方案是
import math
def stDev(lst):
xbar = sum(lst)/len(lst)
mlst = [(v-xbar)**2 for v in lst]
s = sum(mlst)/len(mlst)
return math.sqrt(s)
test = [1, 7, 4, 1, 10]
result = stDev(test)
print(test, result)
![?](http://img1.sycdn.imooc.com/54584c910001b8d902200220-100-100.jpg)
TA贡献1785条经验 获得超4个赞
您应该检查代码中的两个特定行。第一个是这样的:
s /= sum(ranList)-1
为了计算标准偏差,您需要将总和除以 N-1。相反,您将它除以 sum-1。len(list)
建议使用返回列表长度的函数。
第二个是这样的:
数学.sqrt(s)
标准差公式需要返回变量的平方根s
。实际上,该函数math.sqrt(float)
返回参数的根,但不会将最终结果放入参数中。因此,您还应该将返回值分配给s
.
添加回答
举报