如何创建函数来查找平均值和最大偏差(平均值与列表中的另一个数字之间的最高#)?
如果列表为[1,6,8],则应打印出最大偏差为4且平均值为5.
然后我应该使用这两个值作为输出它们的参数来编写另一个函数。
我的代码出了什么问题?我知道我应该使用.sort来获得最大偏差,但我不确定究竟是怎么做的。
假设我已在前一个函数中输出了mylist:def list_output(mylist)
def code(avg,max_dev):
avg = sum(mylist)/len(mylist)
max_dev = ????????
return avg
return max_dev
def main_output(avg,max_dev):
print "The average is", avg, "The maximum deviation is", max_dev
main_output(code(avg, max_dev))
答案 0 :(得分:2)
你可以这样做:
a = [1,6,8]
avg = sum(a, 0.0) / len(a)
max_dev = max(abs(el - avg) for el in a)
答案 1 :(得分:1)
您的问题的其他答案在整个列表中循环三次。一次计算平均值,一次计算列表的最大值和最小值。您可以通过单个循环实现相同的目标:
def avg_max_dev(num_list):
total = 0
minimum = maximum = num_list[0]
for n in num_list:
total += n
if n < minimum:
minimum = n
elif n > maximum:
maximum = n
avg = total / len(num_list) # float(total) on Python2
max_dev = max(avg - minimum, maximum - avg)
return avg, max_dev
编辑: @Slater Tyranus正确批评使用手写循环而不是快速且易于实现的函数sum
,min
和{{ 1}}。
我在Python3.3上测试了IPython中两个函数的性能,在Slater Tyranus'max
函数中删除了浮点数。
calculate
答案 2 :(得分:0)
我会建议这样的事情来找到最大偏差,因为你知道它将是最小数字和平均值之间的差异,或者是最大数字和平均值。
max_dev = max([max(num_list)-avg, avg-min(num_list)])
尽管如此,您的代码仍然存在问题。
请记住,函数的输入与输出不同,因此第一个定义行:
def code(avg,max_dev):
应该更像是:
def code(num_list):
因为你想根据num_list计算东西。
此外,您计算平均值的行非常容易受到浮动除法问题的影响,因此不要说:
avg = sum(mylist)/len(mylist)
我会添加一个浮动转换:
avg = float(sum(num_list))/len(num_list)
另外,在一个函数中只能有一个return语句,所以如果你想这样做,你需要将两个值一起返回,如下所示:
return (avg, max_dev)
总的来说,我会按如下方式重写你的函数:
def calculate(num_list):
avg = float(sum(num_list))/len(num_list)
max_dev = max([max(num_list)-avg, avg-min(num_list)])
return avg, max_dev
def main_output(avg, max_dev):
print "The average is: ", avg, " and the maximum deviation is: ", max_dev
答案 3 :(得分:0)
max dev是平均值和最小值之间的差值和最大值之间的较大值。你可以这样做......
max_dev = max((avg - min(mylist), max(my_list) - avg)
全局变量通常不是一个好主意,因此我建议将my_list作为参数传递给您的函数。
为了从函数返回2个值,您应该创建2的元组并返回两者。像这样......
def code(my_list):
#code goes here
my_avg = ...
my_max_dev = ...
return (my_avg, my_max_dev)
你可以像这样调用你的代码......
avg, max_dev = code(my_list)
您还应该有一些逻辑来确保您的列表只包含数字,否则您可能会得到意想不到的结果!