如何在python中找到列表的中位数

时间:2017-07-10 04:29:24

标签: python

我试图找到列表的中位数。我已经尝试了两种方式,它也没有用(我已经导入了我需要的,列表就在那里)selfies是列表的名称

def median():
    return numpy.median(numpy.array(selfies))

这是错误

  

ret = umr_sum(arr,axis,dtype,out,keepdims)

     

TypeError:无法使用灵活类型执行reduce

,另一种方式是

def median():
    med = statistics.median(selfies)
    return med

错误是

  

return(data [i - 1] + data [i])/ 2

     

TypeError:/:'str'和'int'

的不支持的操作数类型

提前谢谢

2 个答案:

答案 0 :(得分:2)

Hello User9123,

Medain()函数的主要用途

此模块提供计算mathematical statistics of numeric (Real-valued) data

的功能

注意除非另有明确说明,否则这些函数支持int,float,decimal.Decimal和fractions.Fraction。目前不支持其他类型的行为(无论是否在数字塔中)。混合类型也是未定义的和依赖于实现的。如果您的输入数据由混合类型组成,您可以使用map()来确保结果一致,例如map(float,input_data)。

您的问题

当你对字符串使用这个函数,所以它不能正常工作一段时间,所以我建议你使用自定义函数。我在下面的代码中给出了解决方案。

说明函数Median()

<强> statistics.median(数据)

使用常见的“中间两个均值”方法返回数值数据的中位数(中间值)。如果数据为空,则引发StatisticsError。数据可以是序列或迭代器。

中位数是对中心位置的有力衡量指标,并且受数据中异常值的影响较小。当数据点的数量为奇数时,返回中间数据点:

问题解决方案

如果您将此函数用于数值,请尝试以下代码,

def getMedian(numericValues):
  theValues = sorted(numericValues)

  if len(theValues) % 2 == 1:
    return theValues[(len(theValues)+1)/2-1]
  else:
    lower = theValues[len(theValues)/2-1]
    upper = theValues[len(theValues)/2]
    return (float(lower + upper)) / 2 


print getMedian([0,1,2,3,4,5]) # output = 2.5

如果您使用字符串的中值函数,请尝试以下代码,

def medianFind(mystring):
    return mystring[(len(mystring)-1)/2]  #len returns the length of the string

print medianFind("vmr")  #prints m

我希望我的回答很有帮助 如果有任何疑问请评论。

答案 1 :(得分:-1)

使用.sort()或.sorted()根据您的需要对列表进行排序, 然后检索列表[math.floor(len(list)/ 2)]。

如果您不需要对其进行排序并只想要中间值,请使用

list[math.floor(len(list)/2)].