我有以下功能:
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的新手,请原谅我这是非常基本的!
我修改了你的代码并测试了几个案例。
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
如果答案有问题,请告诉我。
你在这里length= len(list)+1
列表的长度添加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
我使用x
,因为list
本身就是一个功能