Python 3.x python代码,用于计算作为输入的列表的中值

Python 3.x python代码,用于计算作为输入的列表的中值,python-3.x,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 el

我有以下功能:

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新手,如果这是非常基本的,请原谅

您在此处的列表长度中添加了1
length=len(list)+1
,这不是必需的

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

没有此选项,您的代码应该可以正常工作

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

从以下内容:
list[length-1/2]


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

您可以执行以下操作:

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
def中值(x):
如果len(x)<2:如果x=[]则返回x,否则返回x[0]
x=已排序(x)
长度=长度(x)-1
如果(长度+1)%2,则返回x[length//2],否则返回x[length//2]+x[length//2+1])/2

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

我已经修改了您的代码并测试了一些情况

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
def中值(列表1):
长度=长度(列表1)

如果length=len(list)+1,则向长度中添加一个。在您的示例中,列表的长度为4,但在您的代码中,它变为5。我建议您不要将
list
用作变量名,因为它会覆盖
list()
函数。