详解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随手笔记第一篇(2)之初识列表和元组
Jan 23 Python
python装饰器初探(推荐)
Jul 21 Python
Python 实现数据库更新脚本的生成方法
Jul 09 Python
Python WXPY实现微信监控报警功能的代码
Oct 20 Python
利用Python找出序列中出现最多的元素示例代码
Dec 08 Python
Django中针对基于类的视图添加csrf_exempt实例代码
Feb 11 Python
python基础教程项目四之新闻聚合
Apr 02 Python
Python paramiko模块的使用示例
Apr 11 Python
使用Python处理BAM的方法
Sep 28 Python
利用ctypes获取numpy数组的指针方法
Feb 12 Python
python实现二级登陆菜单及安装过程
Jun 21 Python
Pytorch之保存读取模型实例
Dec 30 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
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
PHP7正式版测试,性能惊艳!
2015/12/08 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
2019/04/10 PHP
解决 firefox 不支持 document.all的方法
2007/03/12 Javascript
字段太多jquey快速清空表单内容方法
2014/08/21 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
JS实现一个按钮的方法
2015/02/05 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
2015/12/03 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
Javascript 6里的4个新语法
2016/08/25 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
javascript实现简易计算器
2017/02/01 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
原生JS实现多条件筛选
2020/08/19 Javascript
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
Python代理抓取并验证使用多线程实现
2013/05/03 Python
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
git进行版本控制心得详谈
2017/12/10 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
Anaconda+vscode+pytorch环境搭建过程详解
2020/05/25 Python
什么是Python中的顺序表
2020/06/02 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
如何利用python生成MD5并去重
2020/12/07 Python
详解CSS3中字体平滑处理和抗锯齿渲染
2017/03/29 HTML / CSS
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
开办大学饮食联盟创业计划书
2014/01/29 职场文书
文秘档案管理岗位职责
2014/03/06 职场文书
三八妇女节演讲稿
2014/05/27 职场文书
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
2014年优秀班主任工作总结
2014/12/16 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
2019年教师节活动策划方案
2019/09/09 职场文书
如何Python使用re模块实现okenizer
2022/04/30 Python