详解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生成验证码实例
Aug 21 Python
浅谈五大Python Web框架
Mar 20 Python
python pandas 组内排序、单组排序、标号的实例
Apr 12 Python
基于python OpenCV实现动态人脸检测
May 25 Python
Python操作MySQL数据库的方法
Jun 20 Python
python调用c++ ctype list传数组或者返回数组的方法
Feb 13 Python
Python实现的序列化和反序列化二叉树算法示例
Mar 02 Python
Django 表单模型选择框如何使用分组
May 16 Python
Python监控服务器实用工具psutil使用解析
Dec 19 Python
基于python实现对文件进行切分行
Apr 26 Python
python爬虫筛选工作实例讲解
Nov 23 Python
利用Python+OpenCV三步去除水印
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
PHP 查找字符串常用函数介绍
2012/06/07 PHP
PHP判断手机是IOS还是Android
2015/12/09 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
PHP面向对象类型约束用法分析
2019/06/12 PHP
php 利用socket发送GET,POST请求的实例代码
2020/07/04 PHP
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
JavaScript中使用concat()方法拼接字符串的教程
2015/06/06 Javascript
jquery序列化方法实例分析
2015/06/10 Javascript
javascript实现的简单计时器
2015/07/19 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
JS实现类似百叶窗下拉菜单效果
2016/12/30 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
webpack4之SplitChunksPlugin使用指南
2018/06/12 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
2018/07/05 Javascript
如何用原生js写一个弹窗消息提醒插件
2019/05/24 Javascript
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
用Python遍历C盘dll文件的方法
2015/05/06 Python
八大排序算法的Python实现
2021/01/28 Python
Python操作csv文件实例详解
2017/07/31 Python
Python实现注册、登录小程序功能
2018/09/21 Python
python多线程同步实例教程
2019/08/11 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
中医药大学毕业生自荐信
2013/11/08 职场文书
养殖行业的创业计划书
2014/01/05 职场文书
场地使用证明模板
2014/10/25 职场文书
住房公积金贷款工资证明
2015/06/12 职场文书
公司会议开幕词
2016/03/03 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书
七年级作文之英语老师
2019/10/28 职场文书
Golang ort 中的sortInts 方法
2022/04/24 Golang
docker 制作mysql镜像并自动安装
2022/05/20 Servers
SQL Server数据库备份和恢复数据库的全过程
2022/06/14 SQL Server