Python求中位数
每个人都像一辆车。档次有高低,性能有好坏,颜值有高低。但上了路,总归是要向前开。
-
中位数是一个可将数值集合划分为相等的上下两部分的一个数值。
如果列表数据的个数是奇数,则列表中间那个数据就是列表数据的中位数;
如果列表数据的个数是偶数,则列表中间那2个数据的算术平均值就是列表数据的中位数。 -
输入: 一个作为数组的整数(int)列表(list)的。
-
输出: 数组的中位数(int, float).
示例
get_median([1, 2, 3, 4, 5]) == 3
get_median([3, 1, 2, 5, 3]) == 3
get_median([1, 300, 2, 200, 1]) == 2
get_median([3, 6, 20, 99, 10, 15]) == 12.5
前提: 1 < len(data) ≤ 1000 all(0 ≤ x < 10 ** 6 for x in data)
普通方法:
# 对列表进行排序,针对列表长度是奇数还是偶数的不同情况,计算中位数。
def get_median(data):
data = sorted(data)
size = len(data)
if size % 2 == 0: # 判断列表长度为偶数
median = (data[size//2]+data[size//2-1])/2
data[0] = median
if size % 2 == 1: # 判断列表长度为奇数
median = data[(size-1)//2]
data[0] = median
return data[0]
最佳方法:
利用了取反数和为1的特性,通过列表负索引来获得列表中位数。
# 函数:
def get_median(data):
data.sort()
half = len(data) // 2
return (data[half] + data[~half]) / 2
对 return (data[half] + data[~half]) / 2
的解释:
# 解析:
if len = 6, half = 3, -half = -4, 此时 ,对中间2个数 data[~half] 和 data[half] 求和,再取平均值
if len = 5, half = 2, ~half = -3, 此时 data[half] = data[~half] ,求和取平均,等于 data[half]
all: half + ~half = -1