普通方法:
對列表進行排序,然后根據長度為奇數或者偶數的不同情況計算中位數
def huahua(x):
length = len(x)
print(length)
x.sort()
print(x)
if (length % 2)== 1:
z=length // 2
y = x[z]
else:
y = (x[length//2]+x[length//2-1])/2
return y
l = [1,2,3,7,5,6,4,9,8,10]
print(huahua(l))
最佳方法:
采用取反的方式來求中位數,排序后結果為l=[1,2,3,4,5,6,7,8,9,10],長度為10,half=10//2=5,x[5]為列表的第六位數,5的取反數為-6,x[-6]實際上是對列表進行反向查找,為列表中的第五位數,長度為偶數10時中值5+6/2=5.5。
當結果為l=[1,2,3,4,5,6,7,8,9]時,長度為9,half=9//2=4,x[4]為列表的第五位數,4取反為-5,x[-5]在列表中是正向反向查找中的第五位數,所以x[4]==x[-5],中位數就為x[4]或者x[-5]。
def median(data):
data.sort()
half = len(data) // 2
return (data[half] + data[~half])/2
l = [1,2,3,7,5,6,4,9,8,10]
if __name__ == '__main__':
print(median(l))