详解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 相关文章推荐
简单介绍Ruby中的CGI编程
Apr 10 Python
Python import用法以及与from...import的区别
May 28 Python
详解python多线程、锁、event事件机制的简单使用
Apr 27 Python
Python标准库shutil用法实例详解
Aug 13 Python
详解配置Django的Celery异步之路踩坑
Nov 25 Python
Python3实现取图片中特定的像素替换指定的颜色示例
Jan 24 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
Apr 11 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
Python中turtle库的使用实例
Sep 09 Python
通过代码实例了解Python3编程技巧
Oct 13 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
Dec 17 Python
五分钟学会怎么用python做一个简单的贪吃蛇
Jan 12 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
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
2009/04/01 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
js 验证身份证信息有效性
2014/03/28 Javascript
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
JavaScript监听和禁用浏览器回车事件实例
2015/01/31 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
2015/02/25 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
一次让你了解全部JavaScript的作用域
2019/06/24 Javascript
layui 对table中的数据进行转义的实例
2019/09/12 Javascript
JavaScript使用canvas绘制随机验证码
2020/02/17 Javascript
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[51:26]VP vs VG 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
Python中字符串的修改及传参详解
2016/11/30 Python
Python下的Softmax回归函数的实现方法(推荐)
2017/01/26 Python
Python中字典的setdefault()方法教程
2017/02/07 Python
python基础之入门必看操作
2017/07/26 Python
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
基于python实现文件加密功能
2020/01/06 Python
浅谈python的elementtree模块处理中文注意事项
2020/03/06 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
2016/05/17 HTML / CSS
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
中层竞聘演讲稿
2014/01/09 职场文书
小学先进集体事迹材料
2014/05/31 职场文书
科学发展观演讲稿
2014/09/11 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
JavaScript 数组去重详解
2021/09/15 Javascript