-1
def median(numbers):
    numbers.sort() 
    if len(numbers) % 2:
        # if the list has an odd number of elements,
        # the median is the middle element
        middle_index = int(len(numbers)/2)
        return numbers[middle_index]
    else:
        # if the list has an even number of elements,
        # the median is the average of the middle two elements
        right_of_middle = len(numbers)//2 
        left_of_middle = right_of_middle - 1
        return (numbers[right_of_middle] + numbers[left_of_middle])/2

结果示例:

>>> x=[5,10,15,20]
>>> median(x)
12.5
>>> x=[17,4,6,12]
>>> median(x)
9.0
>>> x=[13,6,8,14]
>>> median(x)
10.5

我已经运行了这个功能,它工作正常。一开始很难理解结果,但最终我明白了!

但是,我不明白为什么只有第一个结果像预期的那样。我的意思是结果是列表中间两个数字的平均值。

我希望你明白我是在自学,有时这并不容易。

4

3 回答 3

1

您的函数仅在第一个示例中有效,因为仅对第一个列表进行了排序。对其他列表进行排序或在函数内排序。

于 2017-10-24T18:20:43.300 回答
0

你可能会问:

为什么中位数与平均值不同

那么答案是这样的:

中位数是将数据样本、总体或概率分布的上半部分与下半部分分开的值。

(来自维基百科。)

对于数据集,术语算术平均值、数学期望和有时平均值同义地用于指代离散数字集的中心值:具体而言,是值的总和除以值的数量。

(来自维基百科。)

这两个值可能相等,但通常不同

如果你有10 个穷人1 个百万富翁平均值很高,但中位数(第6 个最穷的人的工资)仍然很低

于 2017-10-24T18:50:09.070 回答
0

仅仅因为那一行:

numbers.sort() 

所以,[17,4,6,12]变成[4,6,12,17]他的中位数9

于 2017-10-24T18:20:52.183 回答