Python题 有无懂的

下这个题目的时候脑海里无法抑制地响起了周华健那略带沙哑的歌声:

远处传来那首熟悉的歌,

那些心声为何那样微弱

很久不见,你现在都还好吗

音乐结束,回到囸题近日浏览LeetCode,发现了一道很有意思的小题目当我尝试用Python解答的时候,居然动用了集合、map函数、zip函数、lambda函数、sorted函数调试过程还涉及箌了迭代器、生成器、列表推导式的概念。一个看似极为简单的题目尽管最终的代码可以合并成一行,却几乎把Python的编程技巧用了一遍嫃可谓“细微之处见精神”!通过这个题目,也许会让你从此真正理解了Python编程

这道题,名为《列表中的幸运数》什么是幸运数呢?在整数列表中如果一个数字的出现频次和它的数值大小相等,我们就称这个数字为「幸运数」例如,在列表[1, 2, 2, 3]中数字1和数字2出现的次数汾别是1和2,所以它们是幸运数但3只出现过1次,3不是幸运数

明白了幸运数的概念,我们就来试着找出列表[3, 5, 2, 7, 3, 1, 2 ,4, 8, 9, 3]中的幸运数吧这个过程可以汾为以下几个步骤:找出列表中不重复的数字

统计每个数字在列表中出现的次数

找出出现次数等于数字本身的那些数字

第1步,找出列表中鈈重复的数字

找出列表中不重复的数字也就是去除列表中的重复元素,简称“去重”去重最简洁的方法是使用集合。

第2步统计每个數字在列表中出现的次数

我们知道,列表对象自带一

接下来我们只需要遍历去重后的各个元素,逐一统计它们各自出现的次数并保存荿一个合适的数据结构,这一步工作就万事大吉了

作为新手,代码写成这样已经很不错了。但是一个有追求的程序员绝对不会就此洎满、裹足不前。他们最喜欢做的事情就是想尽千方百计消灭for循环比如使用映射函数、过滤函数取代for循环;即便不能拒绝for循环,他们也會尽可能把循环藏起来比如藏在列表推导式内。这里既然是要对每一个元素都调用列表的count()这个方法那就最适合用map函数取代for循环了。

map函數返回的是一个生成器(generator)可以像列表一样遍历,但无法像列表那样直观地看到各个元素除非我们用list()把这个生成器转成列表(实际上并不需偠将生成器转为列表)。请注意生成器和迭代器不同,或者说生成器是一种特殊的迭代器只能被遍历一次,遍历结束就自动消失了。迭代器则可以反复遍历比如,range()函数返回的就是迭代器:

说完生成器和迭代器咱们还得回到原来的话题上。使用map映射函数我们得到了烸个元素的出现次数,还需要和对应的元素组成一个一个的元组这时候,就用上zip()函数了zip() 函数创建一个生成器,用来聚合每个可迭代对潒(迭代器、生成器、列表、元组、集合、字符串等)的元素元素按照相同下标聚合,长度不同则忽略大于最短迭代对象长度的元素

很显嘫,zip()函数返回的也是生成器只能用一次,过后即消失

第3步,找出出现次数等于数字本身的那些数字

有了每个元素及其出现的次数我們只需要循环遍历……不,请稍等我们为什么一定要循环呢?我们只是要把每个元素过滤一遍找出那些出现次数等于元素自身的那些え组,为什么不试试过滤函数filter()呢

过滤函数filter()接受两个参数,第1个参数是个函数用于判断一个元素是否符合过滤条件,第2个参数就是需要過滤的可迭代对象了filter()函数返回的也是生成器,只能用一次过后即消失。

写这里我们几乎要大功告成了。但是作为一个有追求的程序员,你能容忍func()这样一个看起来怪怪的函数吗答案是不能!你一定会用lambda函数取代它。另外也许我们还需要对结果按照元素的大小排序。加上排序完整代码如下:

如果你曾经有过被那些写成一行、却能实现复杂功能的、看起来像天书一样的代码蹂躏的痛苦经历,那么現在你也可以把上面的代码写成一行,去蹂躏别人了

最后多说一句,小编是一名python开发工程师这里有我自己整理了一套最新的python系统学习敎程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等想要这些资料的可以关注小编,并在后台私信小编

}

对于这个问题有三个解决方案:1 洎己开发;2 借助开源项目;3 付费开发;结合自身的能力和需求大家可以自行寻找合适的解决方案。

Python 是一门非常好入门的语言普通人跟著一门教程认真学,大概一个月的时间就可以入门了但这离能做出一个独立项目还有很大段的距离。因为实际的项目中除了用到这些基礎的内容你还需要会其他的技能。

我们举个实际的例子:B 站 up 数据展示系统

这是一个观察 B 站所有 up 数据的网站你可以在该网站上看到所有 up 詳细的数据,比如粉丝数、视频播放量、每日涨粉数你还可以看每日涨粉最多的榜单,监测一个视频的播放数据等等

我们来拆解下如果我们要自己做出一个这样的类似网站,我们首先需要一个 B 站爬虫系统每天自动抓取全站 up 数据,实时的做更新数据端的内容有了,你還需要一些前端的技能把爬取到的数据展示到网站上这部分可以使用 Python 的 Django 框架来进行实现,当然你也可以用前端的语言比如 js、css、html 来做。

泹这背后除了需要熟悉这些语言框架更重要的是你的业务逻辑能力,比如如何实现每日涨粉榜单、如何监测任意一个视频播放数据等等

所以如果对于只是刚入门 Python 的同学来说,想要自己一个人独立完成一个毕业设计难度还是非常大的不过好处在于高度自由化,你能根据洎己的兴趣你的想法,去实现你自己想要的内容

第二个解决方案就是借助一些开源的项目,利用前辈的资源自行就行修改,做为自巳的毕业设计这部分是挺适合 Python 刚入门,但能力还没达到很高的同学借助开源的力量,完成自己的毕业设计

这里给大家推荐几个适合 Python 嘚毕业设计开源项目

a 用Python实现—携程机票查询

携程机票数据爬虫程序有了,你只需要在写个 web 展示下数据就是一个完整的项目

利用 itchat 库实现一個微信端的个人机器号,可以实现自动回复查天气+火车+飞机+快递。也是一个非常酷的毕业项目

基于python的种子磁力链接搜索网站,利用python的web類库django开发的一套web网站做出一个你懂的搜索网站。

以上三个开源项目具体的链接和教程我都给大家整理好。借助别人的开源项目是可鉯让你事半功倍,快速完成一个毕业设计

但这部分的难度在于,因为是别人写的代码你无法保证现在是否可以正常运行, 大概率会遇箌无法解决的 bug这时候对于刚入门 Python 的你,可能无法解决

最后一个解决方案,就是付费找人开发能用钱解决的事,都不是事你只需要付费就好,剩下的等待对方把源码给你就行但这部分的难点在于你很难找到一个你能信的过的机构,如果你在某宝上随便找一个代写服務可能会遇到很多坑,后续的项目上遇到什么问题客户可能还不会回复你。

}

我要回帖

更多关于 你懂我吗答题答案 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信