老狗——python求中位数

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

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章