Python - 列表的中值

时间:2017-01-07 17:08:13

标签: python list median

def median(x):

    if range(1, len(x))%2!=0:
        sorted(x)
        listlength = range(1, len(x)+1)
        num = listlength / 2
        middlenum = x[num]
    else:
        sorted(x)
        listlength = range(1, len(x)) 
        num = listlength / 2
        num2 = num + 1
        middlenum = x[num2 + num / 2]
    return middlenum

这是我的代码,我需要找到一个列表的中值(x),但是我收到了这个错误:

"Oops, try again. median([1]) resulted in an error: unsupported operand type(s) for %: 'list' and 'int' "

我真的不知道该怎么做,请帮忙。

3 个答案:

答案 0 :(得分:2)

user_name是可迭代的。对于那种情况,它不能用数字range(1, len(x))除。

我相信你只想使用2

另外,if len(x) % 2:将返回sorted(x)排序,而不是排序。对于该任务,您有x

如果您只想查找中位数,请使用内置statistics.median

x.sort()

否则,请参阅that answer。

答案 1 :(得分:1)

你也可以使用NumPy的内置函数,这可能会更快。

import numpy as np
def median(x):
    return np.median(np.array(x))

NumPy拥有一整套基于阵列的数据分析功能,例如平均值,模式,范围,标准差等等:https://docs.scipy.org/doc/numpy/reference/routines.statistics.html

希望这有帮助!

答案 2 :(得分:-1)

在此程序中,第一个用户将获取五个值。然后将对值进行排序并给出中值。它还将打印较大的值和较小的值与中位数相比。所以,这是您将使用的代码得到中值。

a = [int(x) for x in input().split()]
p,q,r,s,t=a
w=a.sort()
median=a[2]
l=a[3],a[4]
m=a[0],a[1]
print("Median is : %i" %median)
print("The larger values are: %i %i" %l)
print("The smaller values are: %i %i" %m)

如果用户想要获取多个值,则代码为:

import statistics
a = [int(x) for x in input().split()]
w=a.sort()
median=statistics.median(a)
print("Median is : %.2lf" %median)