前言

中位数是一个可将数值集合划分为相等的上下两部分的一个数值。如果列表数据的个数是奇数,则列表中间那个数据就是列表数据的中位数;如果列表数据的个数是偶数,则列表中间那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的解释:

排序后得到序列[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如何获取列表(List)的中位数相关推荐

  1. python列表拆包_详解python 拆包可迭代数据如tuple, list

    详解python 拆包可迭代数据如tuple, list 拆包是指将一个结构中的数据拆分为多个单独变量中. 以元组为例: >>> a = ('windows', 10, 25.1, ...

  2. python 遍历list删除元素_详解Python遍历列表时删除元素的正确做法

    这篇文章主要介绍了详解Python遍历列表时删除元素的正确做法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.问题描述 这是 ...

  3. 用于生成随机数的python标准库模块是_详解Python基础random模块随机数的生成

    详解Python基础random模块随机数的生成 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  详解Python基础random模块随机数的生成.txt ] ( ...

  4. [转载] python中for语句用法_详解Python中for循环的使用_python

    参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...

  5. python可变参数的实验性_详解Python的三种可变参数

    可变参数 可变参数应该最简单,在C/C++和Java等语言中都有,就是用*号来表示,例如 def testArg(*arg) 你可以传入任意多个元素(包括0)到参数中,在函数内部会自动认为是一个元组或 ...

  6. python什么是可变参数_详解Python的三种可变参数

    可变参数 可变参数应该最简单,在C/C++和Java等语言中都有,就是用*号来表示,例如 def testArg(*arg) 你可以传入任意多个元素(包括0)到参数中,在函数内部会自动认为是一个元组或 ...

  7. python中for语句用法_详解Python中for循环的使用_python

    这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程&q ...

  8. python可以播放音乐吗_详解python播放音频的三种方法

    第一种 使用pygame模块 pygame.mixer.init() pygame.mixer.music.load(self.wav_file) pygame.mixer.music.set_vol ...

  9. python命令提示符窗口在哪里_详解python命令提示符窗口下如何运行python脚本

    以arcgispro的python脚本为例在arcgispro自带的python窗口下运行python脚本 需求: 将arcgispro的.aprx项目包中gdb的数据源路径更换为sde数据源路径. ...

  10. python中pandas安装视频教程_详解Python中pandas的安装操作说明(傻瓜版)

    很多人来问我pandas的安装(python数据分析里面的必修课) 步骤如下: 安装python的时候,把路径加到系统里,这样,随时可以用pip 路径添加方法: 查找路径: 路径1: 2.例如: 即: ...

最新文章

  1. android开发教程
  2. html语言可以写模版继承吗,16-Django的模板语言(变量,标签,过滤器,继承,html转义)...
  3. python深入与提高_关于提高Python计算性能的说明摘要,深入,提升,python,笔记,小结,不,定时,更新...
  4. 第五节:Task构造函数之TaskCreationOptions枚举处理父子线程之间的关系。
  5. mysql数据加百分号_使用MySQL SELECT语句时,在每个值的末尾添加一个百分号(%)...
  6. 服务器通过响应头向浏览器设置cookie,http响应包括设置cookie jession id,但随后发送请求,请求标头中没有cookie信息...
  7. vs能运行python吗_vs怎么运行python(vs能运行python吗)
  8. Axure+SVN——实现多人团队开发
  9. 洛谷 - P1034 - 矩形覆盖 - dfs
  10. docker 厂商 容器_我终于不用再解释Docker了!
  11. 服务注册中心---服务发现nacos
  12. 关于STM32使用RTC唤醒停止模式的设置
  13. 联想计算机usb启动怎么办,联想电脑没有u盘启动该如何解决?解决联想电脑没有u盘启动的方法...
  14. 中国公认的大学生计算机编程第一人:楼天城
  15. 【学习记录】Python零基础入门(五)
  16. dxva2+ffmpeg硬件解码(Windows)重要笔记3
  17. 如何找回回收站清空的文件?三种方法帮助你解决问题
  18. ASL吐血整理数据结构查找
  19. java中怎么给方法加锁_Java中,我会用ArrayList,怎么还要会用CopyOnWriteArrayList
  20. 图论学习-有向图强连通分量

热门文章

  1. [转]Oracle销售人员普遍腐败?
  2. 利用Power Designer反向数据库结构
  3. Python基础函数学习笔记(一)
  4. How to convert hair particles to mesh in Blender
  5. php加入语音播报功能_一个有语音播报功能的网络聊天室PHP源码
  6. python用正则表达式提取中文_python3.x提取中文的正则表达式示例代码
  7. 交换机二级可以分流么_「网络安全」网络设备篇(2)——交换机
  8. python @符号_用Python学数学之Sympy代数符号运算
  9. android6.0原生brower_android原生browser分析(二)--界面篇
  10. 64位整数乘法(类快速幂)