详解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学习教程之使用py2exe打包
Sep 24 Python
Python实现k-means算法
Feb 23 Python
对Tensorflow中的矩阵运算函数详解
Jul 27 Python
Python实现处理逆波兰表达式示例
Jul 30 Python
pygame游戏之旅 游戏中添加显示文字
Nov 20 Python
对Python 检查文件名是否规范的实例详解
Jun 10 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
Aug 26 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
Mar 06 Python
python实现对变位词的判断方法
Apr 05 Python
Python抖音快手代码舞(字符舞)的实现方法
Feb 07 Python
使用Python开发贪吃蛇游戏 SnakeGame
Apr 30 Python
python中validators库的使用方法详解
Sep 23 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中用数组的方法设置cookies
2011/04/21 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
PHP实现的回溯算法示例
2017/08/15 PHP
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
2013/05/08 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
2014/04/08 Javascript
Jquery 获取指定标签的对象及属性的设置与移除
2014/05/29 Javascript
JavaScript分秒倒计时器实现方法
2015/02/02 Javascript
js点击选择文本的方法
2015/02/09 Javascript
jquery实现图片预加载
2015/12/25 Javascript
Bootstrap表格和栅格分页实例详解
2016/05/20 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
Vue波纹按钮组件制作
2018/04/30 Javascript
vue填坑之webpack run build 静态资源找不到的解决方法
2018/09/03 Javascript
详解JS中统计函数执行次数与执行时间
2018/09/04 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
2018/12/05 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
javascript解析json格式的数据方法详解
2020/08/07 Javascript
详解nginx配置vue h5 history去除#号
2020/11/09 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
python str与repr的区别
2013/03/23 Python
Python程序运行原理图文解析
2018/02/10 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
python使用matplotlib模块绘制多条折线图、散点图
2020/04/26 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
python统计中文字符数量的两种方法
2019/01/31 Python
Python基础之条件控制操作示例【if语句】
2019/03/23 Python
python实现五子棋小程序
2019/06/18 Python
django云端留言板实例详解
2019/07/22 Python
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
体育教学随笔感言
2014/02/24 职场文书
优秀少先队大队辅导员事迹材料
2014/05/04 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
什么是创业计划书?什么是商业计划书?这里一一解答
2019/07/12 职场文书
Go语言设计模式之结构型模式
2021/06/22 Golang