我如何让我的中位程序工作(第2部分)

时间:2015-11-30 04:14:20

标签: python python-2.x

我正在努力制作一个中位数计划。这是我的代码。

def median(list=[]):
    x = 0
    list = sorted(list)
    if len(list) % 2 == 0:
        b = int((len(list)/2))
        print b
        c = int(len(list)/2)
        x = [list[b-1],list[c]]
        print x
        x = float((x[0]+x[1])/2)
        print str(x)
    else:
        print list[((len(list)//2))]

当我运行它时,我得到了这个

>>> median([1,2,3,4])
2
[2, 3]
2.0

发生了什么事?

请注意:我不想就如何更好地做到这一点提出任何建议,我只是想要帮助。

3 个答案:

答案 0 :(得分:1)

Python 3.4有printf("x = %lf, y = %lf, e1 = %lf, e2 = %lf\n",ellcat[i][0],ellcat[i][1],ellcat[i][2],ellcat[i][3]);

以下是如何使用它的示例

statistics.median

如果您不使用python版本3.4,您可以随时使用我已包含的功能

import statistics

values = [1, 2, 3, 6, 8]

print(statistics.median(values))

虽然这些可能是更加pythonic的方式,如果你想要你的特定功能,你可以这样做

def median(lst):
    lst = sorted(lst)
    if len(lst) < 1:
            return None
    if len(lst) %2 == 1:
           return lst[((len(lst)+1)/2)-1]
    else:
            return float(sum(lst[(len(lst)/2)-1:(len(lst)/2)+1]))/2.0

答案 1 :(得分:1)

试试这个,在分区上寻找2.0而不是2

def median(list=[]):
    x = 0
    list = sorted(list)
    if len(list) % 2 == 0:
        b = int((len(list)/2.0))
        print b
        c = int(len(list)/2.0)
        x = [list[b-1],list[c]]
        print x
        x = float((x[0]+x[1])/2.0)
        print str(x)
    else:
        print list[((len(list)//2))]

答案 2 :(得分:0)

在取平均值之前,您应该将x的元素转换为浮点数:

def median(list=[]):
    x = 0
    list = sorted(list)
    if len(list) % 2 == 0:
        b = int(len(list)/2)
        print b
        c = int(len(list)/2)
        x = [list[b-1],list[c]]
        print x
        x = (float(x[0])+float(x[1]))/2
        print str(x)
    else:
        print list[((len(list)//2))]

median([1,2,3,4])

在原版中你有x = float((x[0]+x[1])/2)。这样就可以添加2个整数并将它们分开。如果这是python 2,则会遇到整数除法问题(我不相信这会在python 3中发生,因为/默认为浮点除法)。你可以通过明确地告诉python你的值是浮点数来解决这个问题(正如我上面所做的那样),或者你可以from __future__ import division并且只使用python 3中的默认浮点除法。

此外,bc都设置为相同的值,因此您无需单独存储它们。在计算列表b

时,只需使用cx
相关问题