跳转至

使用 Python 计算中位数


2021-12-02 by dongnan

开始之前

中位数是一个可将数值集合划分为相等的上下两部分的一个数值,对于Python列表而言:

  • 如果列表内的元素个数是奇数,则列表中间的那个元素就是列表的中位数。
  • 如果列表内的元素个数是偶数,则列表中间的那两个元素的算术平均值就是列表的中位数。

环境描述

Python 版本为 3.6,创建了两个列表,并对列表进行了排序:

列表1长度为偶数

>>> list1 = sorted([float(d.close_value) for d in Indexes.query.get(1).data])
>>> list1_size = len(list1)
>>> list1_size
4144

列表2长度为奇数

>>> list2 = sorted([float(d.close_value) for d in Indexes.query.get(7).data])
>>> list2_size = len(list2)
>>> list2_size
2687

计算中位数

列表1中位数

列表1的长度为偶数,需要计算中间那两个元素的算术平均值:

>>> (list1[list1_size//2] + list1[list1_size//2-1]) // 2
4556.0

列表2中位数

列表2的长度为奇数,直接使用中间的那个元素:

>>> list2[(list2_size-1)//2]
1451.3038

按位取反运算符

~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。

列表3有6个元素,即长度为偶数:

>>> list3 = list(range(1,7))
>>> list3
[1, 2, 3, 4, 5, 6]

中位数为元素3元素4算数平均值。

元素3的索引位置为2:

>>> list3[2]
3

元素4的索引位置为3:

>>> list3[3]
4

利用取反符号,可以巧妙(任意一个元素)的获得两个相连的元素值:

>>> list3[3]
4
>>> list3[~3]
3

列表3的中位数

>>> (list3[3] + list3[~3]) / 2
3.5

列表1和列表2的中位数

按照取反符号方式再次计算计算列表1和列表2的中位数:

>>> mid1 = (list1_size // 2)
>>> (list1[mid1] + list1[~mid1]) / 2
4556.878000000001

>>> (list2[mid2] + list2[~mid2]) / 2
1451.3038

参考

获取列表中位数

欢迎关注微信公众号: 运维录

Back to top