详解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应用的教程
Apr 16 Python
Python自动调用IE打开某个网站的方法
Jun 03 Python
python 网络爬虫初级实现代码
Feb 27 Python
Python基于高斯消元法计算线性方程组示例
Jan 17 Python
Tensorflow中使用tfrecord方式读取数据的方法
Jun 19 Python
Python实现EXCEL表格的排序功能示例
Jun 25 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
Jul 06 Python
Django项目使用CircleCI的方法示例
Jul 14 Python
对Django 转发和重定向的实例详解
Aug 06 Python
python图片指定区域替换img.paste函数的使用
Apr 09 Python
python实现xml转json文件的示例代码
Dec 30 Python
详解python第三方库的安装、PyInstaller库、random库
Mar 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
php下过滤html代码的函数 提高程序安全性
2010/03/02 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
PHP微信公众号自动发送红包API
2016/06/01 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
2018/04/08 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
ExtJs GridPanel简单的增删改实现代码
2010/08/26 Javascript
详解AngularJS中自定义指令的使用
2015/06/17 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
jQuery实现手机自定义弹出输入框
2016/06/13 Javascript
浅谈window.onbeforeunload() 事件调用ajax
2016/06/29 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
vue打包相关细节整理(小结)
2018/09/28 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
详解js根据百度地图提供经纬度计算两点距离
2019/05/13 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
实例分析JS中的相等性判断===、 ==和Object.is()
2019/11/17 Javascript
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
利用Python实现网络测试的脚本分享
2017/05/26 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
sublime python3 输入换行不结束的方法
2018/04/19 Python
python实现朴素贝叶斯算法
2018/11/19 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
2020/02/25 Python
Jupyter Notebook 实现正常显示中文和负号
2020/04/24 Python
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
行政副总岗位职责
2014/02/23 职场文书
优秀公益广告词大全
2014/03/19 职场文书
爱之链教学反思
2014/04/30 职场文书
雏鹰争章活动总结
2014/05/09 职场文书
体育比赛口号
2014/06/09 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
群众路线查摆问题及整改措施
2014/10/10 职场文书
《爱的教育》读书心得
2014/11/08 职场文书
2016新年慰问信范文
2015/03/25 职场文书
行政处罚告知书
2015/07/01 职场文书
python3实现无权最短路径的方法
2021/05/12 Python