详解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中optparse模块使用浅析
Jan 01 Python
举例讲解Python中的迭代器、生成器与列表解析用法
Mar 20 Python
python基于ID3思想的决策树
Jan 03 Python
dataframe设置两个条件取值的实例
Apr 12 Python
Selenium 模拟浏览器动态加载页面的实现方法
May 16 Python
Python实用技巧之利用元组代替字典并为元组元素命名
Jul 11 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
Jul 26 Python
如何将 awk 脚本移植到 Python
Dec 09 Python
Python单链表原理与实现方法详解
Feb 22 Python
python 数据库查询返回list或tuple实例
May 15 Python
conda安装tensorflow和conda常用命令小结
Feb 20 Python
python实现简易自习室座位预约系统
Jun 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
PHP开发需要注意的安全问题
2010/09/01 PHP
php设计模式 Strategy(策略模式)
2011/06/26 PHP
php生成zip压缩文件的方法详解
2013/06/09 PHP
php加密解密实用类分享
2014/01/07 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
2016/07/25 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
YII2框架中日志的配置与使用方法实例分析
2020/03/18 PHP
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
15个款优秀的 jQuery 图片特效插件推荐
2011/11/21 Javascript
鼠标滚轴控制文本框值的JS代码
2013/11/19 Javascript
JavaScript表单通过正则表达式验证电话号码
2014/03/14 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
2016/10/19 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
微信小程序入口场景的问题集合与相关解决方法
2019/06/26 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
python二叉树遍历的实现方法
2013/11/21 Python
python实现数通设备tftp备份配置文件示例
2014/04/02 Python
在Django的通用视图中处理Context的方法
2015/07/21 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
Python中的集合介绍
2019/01/28 Python
python实现最小二乘法线性拟合
2019/07/19 Python
pycharm + django跨域无提示的解决方法
2020/12/06 Python
用CSS3实现瀑布流布局的示例代码
2017/11/10 HTML / CSS
法律专业应届生自荐信范文
2014/01/06 职场文书
优秀经理事迹材料
2014/02/01 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
党的群众路线教育实践活动心得体会(企业)
2014/11/03 职场文书
2014年个人思想工作总结
2014/11/27 职场文书
2015年发展党员工作总结报告
2015/03/31 职场文书
幼儿园春季开学通知
2015/07/16 职场文书
导游词之河姆渡遗址博物馆
2019/10/10 职场文书