Python面试题 —— 获取列表中位数
中位数是一个可将数值集合划分为相等的上下两部分的一个数值。如果列表数据的个数是奇数,则列表中间那个数据就是列表数据的中位数;如果列表数据的个数是偶数,则列表中间那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面试题:http://www.landsblog.com/blog/category/pythonmianshi
Python面试题 —— 获取列表中位数的更多相关文章
- Python面试题之列表推导式
题目要求: 生成如下列表 [[0,0,0,0,0,],[0,1,2,3,4,],[0,2,4,6,8,],[0,3,6,9,12,]] (考察列表生成式和基本逻辑推理) 方法1: list1 = [] ...
- Python面试题 —— 计算列表中出现最多次的字符
给你一个其中包含不同的英文字母和标点符号的文本,你要找到其中出现最多的字母,返回的字母必须是小写形式, 当检查最想要的字母时,不区分大小写,所以在你的搜索中 "A" == &quo ...
- python 面试题: 列表表达式
[process() for item1 in iterable1 if condition1 for item2 in iterable2 if condition2 For item3 in it ...
- Python中如何获取类属性的列表
这篇文章主要给大家介绍了在Python中如何获取类属性的列表,文中通过示例代码介绍的很详细,相信对大家的学习或者工作具有一定的参考借鉴价值,有需要的朋友可以参考借鉴,下面来一起看看吧. 前言 最近工作 ...
- 【python】获取列表中最长连续数字
最近开发遇到一个功能需求,目的是要获取一个AI分析结果中最长连续帧,比如一个视频中连续3帧有人,那么我认为这个视频就是有人,我就要判断这个视频帧列表中是否有连续的三帧有人.本质就是获取列表中的最长连续 ...
- python 通过scapy获取网卡列表
python通过scapy 获取网卡列表如下: #coding:utf-8 from scapy.all import * #显示网卡信息 show_interfaces() 运行结果如下:
- python公司面试题集锦 python面试题大全
问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Par ...
- Python面试题汇总
原文:http://blog.csdn.net/jerry_1126/article/details/44023949 拿网络上关于Python的面试题汇总了,给出了自认为合理的答案,有些题目不错,可 ...
- 60道Python面试题&答案精选!找工作前必看
需要Word/ PDF版本的同学可以在实验楼微信公众号回复关键词"面试题"获取. 1. Python 的特点和优点是什么? 答案:略. 2. 什么是lambda函数?它有什么好处? ...
随机推荐
- WP开发-Toolkit组件 列表采集器(ListPicker)的使用
列表采集器ListPicker在作用上与html中的<select/>标签一样 都是提供多选一功能,区别在于ListPicker可以自定义下拉状态和非下拉状态的样式. 1.模板设置 Lis ...
- 史上最全的MSSQL复习笔记 (转连接)
http://www.cnblogs.com/gameworld/p/4790881.html
- [实践] ubuntu下编译安装ambari
ambari是一个Hadoop套件的管理工具,可以方便部署.管理及监控.最初开发时使用的就是RH系的Linux,只支持RHEL.CentOS5/6.OEL.SLES,暂不支持Ubuntu:可我的需求就 ...
- PHP后门隐藏与维持技巧
在一个成功的测试后,通常会想让特权保持的更久些.留后门的工作就显得至关重要,通常布设的后门包括但不限于数据库权限,WEB权限,系统用户权限等等.此文则对大众后门隐藏的一些思路做科普. AD: 0×00 ...
- 自定义input[type="file"]的样式
input[type="file"]的样式在各个浏览器中的表现不尽相同: 1. chrome: 2. firefox: 3. opera: 4. ie: 5. edge: 另外,当 ...
- Linux的交叉编译 及configure配置
这两天需要把一个CDVS的工程代码从Linux 平台上移植到ARM平台上,花了两天才搞定,之前很早申请的博客,到现在还没有技术文章会,以后决定凡是花两三天才搞定的东西都会把解决过程发到这里,很多东西靠 ...
- python中property干什么用的?
先来段官方文档压压惊.. property(fget=None, fset=None, fdel=None, doc=None) Return a property attribute. fget i ...
- java 21 - 4 字符流的文件复制操作以及简化
既然字节流可以复制文件,那么字符流当然也有. 同样的思路: 数据源: a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader目的地: b.txt -- 写出数据 -- ...
- 颗粒翻页(css3效果展示)
用css3效果做了一个颗粒翻页效果,布局上,一张图片做底层,在这张图片上用js创建一层小的行和列各为r和c的小span,给这些span分别设置background-position:用来覆盖原来的一张 ...
- Intellij IDEA 快捷键(Mac)
编辑 格式化代码 Alt+Command+L 大小写切换 Shift+Command+U 包围 Alt+Command+T 选中代码抽取方法 Alt+Command+M 调试/运行 查看 类关系视图 ...