详解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使用cookie库操保存cookie详解
Mar 03 Python
跟老齐学Python之画圈还不简单吗?
Sep 20 Python
非递归的输出1-N的全排列实例(推荐)
Apr 11 Python
python实现自动发送邮件发送多人、群发、多附件的示例
Jan 23 Python
python实现类之间的方法互相调用
Apr 29 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
Sep 18 Python
如何基于windows实现python定时爬虫
May 01 Python
django 连接数据库出现1045错误的解决方式
May 14 Python
python如何快速生成时间戳
Jul 21 Python
python如何实现图片压缩
Sep 11 Python
python对批量WAV音频进行等长分割的方法实现
Sep 25 Python
解决Pytorch dataloader时报错每个tensor维度不一样的问题
May 28 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
CURL状态码列表(详细)
2013/06/27 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
javascript动态添加样式(行内式/嵌入式/外链式等规则)
2013/06/24 Javascript
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
跟我学习javascript的浮点数精度
2015/11/16 Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
2016/03/08 Javascript
基于Bootstrap3表格插件和分页插件实例详解
2016/05/17 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
JS闭包与延迟求值用法示例
2016/12/22 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
使用JavaScript实现链表的数据结构的代码
2017/08/02 Javascript
JS设计模式之状态模式概念与用法分析
2018/02/05 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
JS 实现微信扫一扫功能
2018/09/14 Javascript
vue的列表交错过渡实现代码示例
2019/05/05 Javascript
JS实现滚动条触底加载更多
2019/09/19 Javascript
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
Python编程pygal绘图实例之XY线
2017/12/09 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
对numpy下的轴交换transpose和swapaxes的示例解读
2019/06/26 Python
python爬虫 requests-html的使用
2020/11/30 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
一款利用纯css3实现的win8加载动画的实例分析
2014/12/11 HTML / CSS
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
互联网创业计划书的书写步骤
2014/01/28 职场文书
公务员爱岗敬业演讲稿
2014/08/26 职场文书
出纳工作检讨书
2014/10/18 职场文书
中秋节慰问信
2015/02/15 职场文书
2019公司管理制度
2019/04/19 职场文书
深入浅析Django MTV模式
2021/09/04 Python
Python 的 sum() Pythonic 的求和方法详细
2021/10/16 Python
nginx日志格式分析和修改
2022/04/28 Servers