2016-09-27 38 views
0

下面是一个问题,我试图定义一个函数sample_mean,它将数字列表作为参数并返回该列表中数字的样本均值。这是我到目前为止,但我不确定它是完全正确的。如何用列表作为参数编写函数

def sample_mean(list): 
    """ (list) -> number 
    takes in a list of numbers as a parameter and returns the sample mean of the the numbers in that list 
    sample_mean = 
    sample_mean = 
    """ 

    mean = 0 
    values = [list] 
    for list in values: 
     print('The sample mean of', values, 'is', mean(list)) 
+2

请勿使用'list'作为参数来定义* list *。它会隐藏内置的[list](https://docs.python.org/3/library/functions.html#func-list)。 – idjaw

+2

如果你的方法需要一个列表,那么'values = [list]'没有意义。你传递给你的列表的参数应该已经是一个列表,所以你在那里做什么是不需要的。例如:如果你有一个列表以'[1,2]'的形式传递给你的方法,那么'values = [list]'将把它变成'[[1,2]]'。这绝对是你不想要的。 – idjaw

+0

真棒谢谢你! –

回答

1

首先,不要使用list作为名称,因为它会为其声明的范围隐藏/隐藏内置的list类。使用描述列表中的值的名称,在这种情况下,samples可能是个好名字。

def sample_mean(samples): 
    total = 0 
    for value in samples: 
     total = total + value 
    return total/float(len(samples)) 

或避免通过使用Python的sum()功能自己写循环一个较短的版本:

def sample_mean(samples): 
    return sum(samples)/float(len(samples)) 

这样调用该函数:

功能可以像这样的东西来实现
>>> print(sample_mean([1,2,3,4,5])) 
3.0 

请注意使用float()以确保除法操作不会丢失小数部分。这只是Python 2中默认使用整数除法的一个问题。如果你相信,你只需要支持Python 3中可以去除float()和忽略上述

from __future__ import division 

:另外,您可以添加到您的脚本的顶部。

+0

谢谢你这是非常有用的信息。我对编码和python都很陌生。 –

0

正如@idjaw如上所述,不使用list作为参数而使用listr(例如)。您的values = [list]是错误的(也由@idjaw声明),应该删除。

此外,根据PEP257,您不应该在文档字符串中使用"(list) -> number",因为它只能用于builtins。

最后,您的循环应该看起来像for l in listr:,然后将值添加到您的平均变量。将它除以列表中的值的数量并打印结果。

+0

我有一个关于打印这样一个语句的答案的问题“[样本]的样本均值是[sample_mean]”我拥有这个,但是它不会打印出像我想要的样本,样本数为0的样本, :print('sample',sample'','sample_mean')有人可以解释什么是错的吗? –

+0

是'sample_mean'和'int'?那么为什么你会在样本中有'数字:'? – Corgs

+0

no sample_mean是样本的平均值 –

相关问题