一道人人都会的python题,考验你的编程思维,教你打开正确的学习方法
送你小心心记得关注我哦!!
在面试或者是笔试中会出现一些看似简单而且常规的考题,我们往往给出的是最为普通的解题思路,然后就被pass了。下面有一道非常简单,人人都会的编程题,但是编程不仅要讲究“会”,更要讲究“巧”。你的解答足够巧妙吗?通过学习别人的代码,获取新的知识,进而提高自己的技术水平。
起因
昨天晚上在pythontip刷题的时候,刷到如下题目。
给你一个整数列表L, 输出L的中位数(若结果为小数,则保留一位小数)。
例如: L=[0,1,2,3,4]
则输出:2
对于大多数人来说没啥难度,但是这里我要说的并不只是如何解答这道题,更多的是传达一种思想。
解题思路
首先明确中位数的概念,以及如何通过程序的方式获取中位数,
概念:
中位数(Medians)统计学名词,是指将统计总体当中的各个变量值按大小顺序排列起来,形成一个数列,处于变量数列中间位置的变量值就称为中位数,用Me表示。当变量值的项数N为奇数时,处于中间位置的变量值即为中位数;当N为偶数时,中位数则为处于中间位置的2个变量值的平均数。
分析重点:
首先有序,从小大到的顺序,也就是说第一步要排序,python中我们可以使用sorted即可。
确定元素的个数是奇数还是偶数:
奇数,取中间元素即为中位数,例如[1,2,3,4,5]5个元素,个数为奇数 也就是取中间数字,即3
偶数,取中间2个元素并取平均即为中位数,例如[1,2,3,4,5,6] 6个元素,个数为偶数 也就是取中间2个数字并取其平均数,即(3+4)/3=3.5
我的代码
L=[1,2,3,4,5,6]
L.sort()
if len(L)%2==0:
print (L[len(L)/2-1]+L[len(L)/2])/2.00
else:
print L[(len(L)-1)/2]
觉得很简单就是应用数学原理搞定,直到我看到下面解法:
# 中位数
# L = [0, 1, 2, 3, 4] # 2
L = [0, 1, 3, 4, 5,7]
L.sort()
l_len = len(L)
n = (l_len - 1) // 2 #向下取整
if l_len & 0x1:
print(L[n])
else:
print("%.1f" %((L[n] + L[n+1]) / 2.0))
第一次看这代码一脸懵逼,首先//这个符号,还真就没怎么用过,后来查资料发现意思是向下取整,这个大部分人应该知道,然后看到奇怪的&0x1这是啥玩意呢,经过询问度娘,我找到了如下解释:
C语言中&表示按位与,0x开头的表示的是十六进制数,k&0x1表示k与0x1按位与,
其效果为取k的二进制中最右边的数字,该式也可以用做判断k的奇偶性, 如果k为奇数,其计算结果为1,否则为0。
这个解释已经说的很详细,这个操作就是为了计算奇偶性的,大家可以利用起来哦,是不是很酷。
其实上面的这个简单的编程题,一开始让小编自己去做也就是使用最简单的方法判断,后面从其他人那里得知这个题高大上的解题思路,不由得敬佩不已。
学习方法很多种,关键看你如何选择,和优秀的人学习,才能不断进步不是嘛。
另外,今天给大家精心推荐一些行业里做的比较用心的技术公众号,覆盖不同的技术领域,相信对大家的技术成长之路有一定的帮助。
IT行业技术圈
▲长按图片识别二维码关注
IT行业技术圈,Hi,老铁!等你好久了,本公众号主要分享Linux、Python、网络基础相关的技术文章,包括但不限于web、爬虫、数据分析、人工智能、实用工具等领域的知识,并且还有一些面试题,面试技巧等相关文章。欢迎你的加入,共同学习,一起成长!
Python空间
▲长按图片识别二维码关注
你好,欢迎关注「Python空间」,我是 Rocky0429,某 985 计算机在读研究生,ACM 退役狗 & 亚洲区域赛银奖划水选手。
这里是一个坚持原创的技术公众号,专注Python 编程,每天坚持推送各种 Python 基础/进阶文章,数据分析,爬虫实战,数据结构与算法,不定期分享各类资源。
这里又不是一个单纯的技术公众号,每周我还会分享关于「认知」和「学习」等方面的原创文章,偶尔聊聊天吹吹水,像老朋友一样。
IT平头哥联盟
▲长按图片识别二维码关注
IT平头哥联盟是一个专注于前端/测试领域的技术分享的平台,希望与您一起成长,用心分享 做有温度的攻城狮,欢迎大家订阅!
Java架构师日记
▲长按图片识别二维码关注
Java架构师日记,Java知识和技术查漏补缺,空余时间学习碎片化知识,分享开发、运维、架构等综合性知识,助力职场最后一公里与职业进阶,每天看日记,就选它!
五分钟学算法
▲长按图片识别二维码关注
五分钟学算法,一个致力于用PPT动画去演示数据结构与算法的平台,每种数据结构,每个LeetCode算法题,我都会在PPT中一步一步慢慢的剖析出来。
日更达人,每天清晨的八点半,我都会推送一个技术点,你每天只需要几分钟(乘车、等餐、等人、上厕所等)就可以阅读完一篇赏心悦目的文章。
欢迎加入,一起学习,一起进步!
机器学习与python集中营
▲长按图片识别二维码关注
机器学习与python集中营,python以及机器学习重度爱好者,多年的python开发经验积累,专注于python编程、机器学习、深度学习领域。分享无套路共享资源、高质量技术文章、项目实战经验、各类数据集、面试真题和面经等,还有定期送书福利。专注的理工男,只想做一个纯粹实用的技术号,欢迎大家一起学习交流!
AI算法与图像处理
▲长按图片识别二维码关注
AI算法与图像处理,号主是刚步入社会正不断在成长的小算法工程师(计算机视觉),主要研究方向计算机视觉和图像处理,公众号会分享一些优越的书籍资料/视频教材和面试笔试等宝贵经历,在这个数据爆炸时代提供最有价值的资料,也真心希望和大家交个朋友,学技术交朋友过日子,我们全都要。
python学习开发
▲长按图片识别二维码关注
python学习开发,一个喜欢研究python语言的公众号,主要领域是爬虫,以及python的使用技巧,干货分享。人生苦短,你还不来学python么。