Python面试题 —— 获取列表中位数
2016-08-12 10:28
211 查看
中位数是一个可将数值集合划分为相等的上下两部分的一个数值。如果列表数据的个数是奇数,则列表中间那个数据就是列表数据的中位数;如果列表数据的个数是偶数,则列表中间那2个数据的算术平均值就是列表数据的中位数。在这个任务里,你将得到一个含有自然数的非空数组(X)。你必须把它分成上下两部分,找到中位数。
输入: 一个作为数组的整数(int)列表(list)的。
输出: 数组的中位数(int, float).
范例:
如何使用: 中位数在概率论和统计学中得到应用,它偏态分布中有显著的价值。例如:我们想从一组数据中知道人们的平均财富 -- 100人一个月收入100美元,10人一个月收入1,000,000美元。如果我们算平均值,得到的是91000美元。这是一个完全没有向我们展示真实情况的奇怪的值。所以在这种情况下,中位数会给我们更有用的值和较好的描述。
前提: 1 < len(data) ≤ 1000 all(0 ≤ x < 10 ** 6 for x in data)
普通方法:
对列表进行排序,针对列表长度是奇数还是偶数的不同情况,计算中位数。
最佳方法:
这个解决方法非常巧妙,它利用了取反数和为1的特性,通过列表负索引来获得列表中位数。
对 return (data[half] + data[~half]) / 2 的解释:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/dba025f2bf8dd20ea63f90b975a63fe5.png)
排序后得到序列[1,2,3,4,5,6],其列表长度为偶数,中位数由列表中间两位元素3(索引为2),4(索引为3)决定。而元素4的负索引为-3,正好是索引2的取反数。
排序后得到序列[1,2,3,4,5],其列表长度为奇数,中位数由列表中间元素3(索引为2,负索引为-3)决定。仍然符合代码。
更多Python面试题:http://www.landsblog.com/blog/category/pythonmianshi
输入: 一个作为数组的整数(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 的解释:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/dba025f2bf8dd20ea63f90b975a63fe5.png)
排序后得到序列[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面试题:http://www.landsblog.com/blog/category/pythonmianshi
相关文章推荐
- 详解Python如何获取列表(List)的中位数
- python 获取一定范围内不重复的多个随机数列表
- python for windows 获取进程列表 part2 (自学备注)
- python获取微信公共平台消息列表和用户头像
- python 获取一定范围内不重复的多个随机数列表
- python 获取指定文件列表
- python 获取文件列表(或是目录例表)
- python实现获取文件列表中每个文件关键字
- 003_004 Python 获取列表中所有歌曲播放时间总和
- python学习四:import模块方法、可变参数、字典key判断、版本信息获取、列表解析、
- python模拟163登陆获取邮件列表
- 使用Python模拟登录QQ邮箱获取QQ好友列表
- python中如何获取文件列表
- python模拟163登陆获取邮件列表
- 004_021 Python 以指定的概率获取元素 以一个列表为基准概率,从一个列表中随机获取元素
- python 获取一定范围内不重复的多个随机数列表
- Python:获取新浪微博用户的收听列表和粉丝列表
- python 获取文件列表(或是目录例表)
- Python 获取新浪微博指定用户的微博列表
- 使用Python获取指定文件夹下文件名列表