python代码来计算列表的中位数作为输入

时间:2018-09-14 01:57:23

标签: python-3.x

我具有以下功能:

def median(list):
  if list ==[]:
    return []

  elif len(list)==1:
    return list[0]

  else: 
    list= sorted(list)
    length= len(list)+1
    median=0

    if length%2==0:
            median= (list[length/2]+list[length/2-1])/2
    else:
            median= list[length-1/2]    
  return median

当我这样称呼它时,它给了我一个错误:

median([4, 5, 5, 4])
  

导致错误:列表索引超出范围

PS:我是python的新手,如果这很基础,请原谅!

3 个答案:

答案 0 :(得分:1)

您在length= len(list)+1的列表长度上加了1,这不是必需的。

如果您的列表看起来像list = [4,5,5,4] len(list)将返回4。

没有这个,您的代码应该可以正常工作。

编辑:最好也指定操作顺序:

从这样的事情:list[length-1/2]

对此:list[(length-1)/2]

答案 1 :(得分:0)

您可以执行以下操作:

def median(x):
    if len(x) < 2 : return x if x ==[] else x[0]
    x = sorted(x)
    length = len(x)-1
    return x[length//2] if (length + 1) % 2 else (x[length//2] + x[length//2+1])/2

我使用x是因为list本身就是一个函数

答案 2 :(得分:0)

我已经修改了您的代码并进行了一些测试。

def median(list1):

   length= len(list1)

   if length <=0 :
       return None
   if (length)==1:
       return list1[length//2] 
   else: 
     list1= sorted(list1)
     median=0

     if length % 2 == 0:
             median= (list1[length//2]+list1[length//2-1])/2
     else:
             median= list1[length//2]    
   return median

请让我知道答案是否有问题。