老夏学院

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 595|回复: 0

计算整数列表的中位数

[复制链接]

304

主题

847

帖子

1082

G币

院长

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
1082

院长资深讲师

QQ
发表于 2023-7-11 10:17:08 | 显示全部楼层 |阅读模式
       计算整数列表的中位数

    中位数又称中值,统计学中的专有名词,是指按顺序排列的一组数据中居于中间位置的数,代表一个样本、种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分。对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。

    所以此题中,如果列表中数据的个数是奇数,则列表中间那个数据就是列表数据的中位数;如果列表中数据的个数是偶数,则列表中间2个数据的算术平均值就是列表数据的中位数。
    解析代码如下:
  1. def get_median(data):
  2.     # 对列表进行排序
  3.     data.sort()
  4.     # 获取列表的长度
  5.     length = len(data)
  6.     # 初始化中位数
  7.     median = None
  8.     # 列表长度为偶数
  9.     if length % 2 == 0:
  10.         # 计算出列表中间2个数据的算术平均值
  11.         median = (data[length // 2] + data[length // 2 - 1]) / 2
  12.     # 列表长度为奇数
  13.     if length % 2 == 1:
  14.         # 计算出列表中间的数据
  15.         median = data[(length - 1) // 2]
  16.     return median
  17. ret = get_median([2, 3, 5, 4, 8, 10])
  18. print(ret)
复制代码
    此外,本题除了上述的传统算法,还有一种非常巧妙的算法,即将列表长度整除2之后的正索引取反,然后只需要将正、负索引对应的元素相加除2,即可得到中位数。
    例如,当有偶数列表[1,2,3,4,5,6],则其中位数由列表中间的两个数据3(负索引为-4)和4(负索引为-3)决定,而该列表长度整除2之后的正索引为3,其所对应的元素为4,此时,将正索引3取反,得到的恰恰是负索引-4,所对应的元素为3,正是所需要的列表中间的两个数据,所以只需要将2个正、负索引对应的元素相加除2,即可得到中位数;当有奇数列表[1,2,3,4,5],则其中位数就是列表中间的数据3,而该列表长度整除2之后的正索引为2,对应的元素为3,此时,将正索引2取反,得到的恰恰是负索引-3,所对应的元素仍为3,所以只需要将2个正、负索引对应的元素相加除2,即可得到中位数。
    解析代码如下:
  1. def get_median(data):
  2.     # 对列表进行排序
  3.     data.sort()
  4.     # 列表长度整除2
  5.     half = len(data) // 2
  6.     # 将正、负索引对应的元素相加除2,即可得到中位数
  7.     median = (data[half] + data[~half]) / 2
  8.     return median
  9. ret = get_median([2, 3, 5, 4, 8, 10])
  10. print(ret)
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|老夏学院 ( 辽ICP备19020546号-1 )

GMT+8, 2024-5-18 20:51 , Processed in 1.065471 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020.

快速回复 返回顶部 返回列表