详解Python如何获取列表(List)的中位数


Posted in Python onAugust 12, 2016

前言

中位数是一个可将数值集合划分为相等的上下两部分的一个数值。如果列表数据的个数是奇数,则列表中间那个数据就是列表数据的中位数;如果列表数据的个数是偶数,则列表中间那2个数据的算术平均值就是列表数据的中位数。在这个任务里,你将得到一个含有自然数的非空数组(X)。你必须把它分成上下两部分,找到中位数。

输入: 一个作为数组的整数(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
 

如何使用: 中位数在概率论和统计学中得到应用,它偏态分布中有显著的价值。例如:我们想从一组数据中知道人们的平均财富 -- 100人一个月收入100美元,10人一个月收入1,000,000美元。如果我们算平均值,得到的是91000美元。这是一个完全没有向我们展示真实情况的奇怪的值。所以在这种情况下,中位数会给我们更有用的值和较好的描述。

前提: 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的特性,通过列表负索引来获得列表中位数。

return (data[half] + data[~half]) / 2 的解释:

详解Python如何获取列表(List)的中位数

排序后得到序列[1,2,3,4,5,6],其列表长度为偶数,中位数由列表中间两位元素3(索引为2),4(索引为3)决定。而元素4的负索引为-3,正好是索引2的取反数。

排序后得到序列[1,2,3,4,5],其列表长度为奇数,中位数由列表中间元素3(索引为2,负索引为-3)决定。仍然符合代码。 

def get_median(data):
   data.sort()
   half = len(data) // 2
   return (data[half] + data[~half]) / 2

总结

以上就是Python实现获取列表的中位数的全部内容,希望本文的内容对大家学习python能有所帮助。

Python 相关文章推荐
Python自动化测试工具Splinter简介和使用实例
May 13 Python
python抓取网页时字符集转换问题处理方案分享
Jun 19 Python
Python加pyGame实现的简单拼图游戏实例
May 15 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
Jul 15 Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
基于python实现在excel中读取与生成随机数写入excel中
Jan 04 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
Mar 19 Python
python利用高阶函数实现剪枝函数
Mar 20 Python
Python装饰器模式定义与用法分析
Aug 06 Python
Python Numpy 控制台完全输出ndarray的实现
Feb 19 Python
Python通过类的组合模拟街道红绿灯
Sep 16 Python
Python代码风格与编程习惯重要吗?
Jun 03 Python
Python抓取框架 Scrapy的架构
Aug 12 #Python
判断网页编码的方法python版
Aug 12 #Python
Python利用IPython提高开发效率
Aug 10 #Python
详解python如何调用C/C++底层库与互相传值
Aug 10 #Python
浅析python中的分片与截断序列
Aug 09 #Python
总结python爬虫抓站的实用技巧
Aug 09 #Python
教你用Type Hint提高Python程序开发效率
Aug 08 #Python
You might like
第四节 构造函数和析构函数 [4]
2006/10/09 PHP
第二节--PHP5 的对象模型
2006/11/16 PHP
PHP 函数学习简单小结
2010/07/08 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
Yii2 rbac权限控制操作步骤实例教程
2016/04/29 PHP
PHP的mysqli_stmt_init()函数讲解
2019/01/24 PHP
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
javascript中的float运算精度实例分析
2010/08/21 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
js简单实现让文本框内容逐个字的显示出来
2013/10/22 Javascript
js 时间格式与时间戳的相互转换示例代码
2013/12/25 Javascript
javascript实现根据时间段显示问候语的方法
2015/06/18 Javascript
JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
2015/06/19 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
three.js中3D视野的缩放实现代码
2017/11/16 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
JavaScript/TypeScript 实现并发请求控制的示例代码
2021/01/18 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
python中使用urllib2伪造HTTP报头的2个方法
2014/07/07 Python
python3+PyQt5 实现Rich文本的行编辑方法
2019/06/17 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
Python Selenium截图功能实现代码
2020/04/26 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
2020/08/04 Python
中职生自我鉴定范文
2013/10/03 职场文书
求职简历中个人的自我评价
2013/12/25 职场文书
中学门卫岗位职责
2013/12/26 职场文书
事业单位请假制度
2014/01/13 职场文书
个人培训自我鉴定
2014/03/28 职场文书
党员国庆节演讲稿范文2014
2014/09/21 职场文书
公安机关起诉意见书
2015/05/20 职场文书
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python
python数字图像处理之对比度与亮度调整示例
2022/06/28 Python