详解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正则表达式 re模块使用说明
May 19 Python
Python中的集合类型知识讲解
Aug 19 Python
python实现k-means聚类算法
Feb 23 Python
Python切片工具pillow用法示例
Mar 30 Python
python之super的使用小结
Aug 13 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
Nov 07 Python
使用Python的Turtle库绘制森林的实例
Dec 18 Python
Python: 传递列表副本方式
Dec 19 Python
Python中 Global和Nonlocal的用法详解
Jan 20 Python
tensorflow 保存模型和取出中间权重例子
Jan 24 Python
使用PyCharm安装pytest及requests的问题
Jul 31 Python
Python3合并两个有序数组代码实例
Aug 11 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
咖啡风味 世界咖啡主要分布分布 咖啡的生长要求
2021/03/06 新手入门
一个显示天气预报的程序
2006/10/09 PHP
php面向对象的方法重载两种版本比较
2008/09/08 PHP
ajax实现无刷新分页(php)
2010/07/18 PHP
深入探讨PHP中的内存管理问题
2011/08/31 PHP
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
PHP实现bitmap位图排序与求交集的方法
2016/07/28 PHP
AJAX的使用方法详解
2017/04/29 PHP
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
jQuery简易图片放大特效示例代码
2014/06/09 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
基于jQuery实现表单提交验证
2014/11/24 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
2018/05/31 Javascript
Node.js搭建WEB服务器的示例代码
2018/08/15 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
2019/05/09 Javascript
JavaScript实现美化滑块效果
2019/05/17 Javascript
JavaScript实现横版菜单栏
2020/03/17 Javascript
JavaScript中条件语句的优化技巧总结
2020/12/04 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
python列表操作实例
2015/01/14 Python
python 自动重连wifi windows的方法
2018/12/18 Python
Pandas实现一列数据分隔为两列
2020/05/18 Python
Python压缩模块zipfile实现原理及用法解析
2020/08/14 Python
python中类与对象之间的关系详解
2020/12/16 Python
文件中有一组整数,要求排序后输出到另一个文件中
2012/01/04 面试题
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
大学生职业规划前言模板
2013/12/27 职场文书
加工操作管理制度
2014/01/19 职场文书
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
大足石刻导游词
2015/02/02 职场文书
如何用python插入独创性声明
2021/03/31 Python
css3实现背景图片颜色修改的多种方式
2021/04/13 HTML / CSS
生命的关键成分来自太空?陨石说是的
2022/04/29 数码科技