Python入门之后再看点什么好?


Posted in Python onMarch 05, 2018

不止一次在微信、知乎有读者朋友跑过来问:看完了基础书,甚至看两遍了,但自己写的时候还是没思路,我该怎么办?

编程在我看来就是一门手艺活,绝不是简单通过看书就能学会的,跟学游泳、学车、学钢琴一个道理,没别的,掌握了最基本的理论之后就是干,只有通过大量的练习、实战才能掌握编程这门技能,之后再回过来头来继续深入理论

这个问题在知识星球也同样被问,于是在那里我们设了每日一题的专题,每周会出三道题给大家,做完之后要求提交到 GitHub,我会统一对代码进行 review。这些题一般都是出自于一些真实应用场景,通过这种方式来提高编程水平。

下面这道题我们在星球中的第三题,在你往下翻之前,不妨梳理下你的编程思路。

题目:

统计一个文件中每个单词出现的次数,列出出现频率最多的5个单词。

前言:

这道题在实际应用场景中使用比较广泛,记得哪里看到说李笑来就利用他的编程技能出版过一本背单词的畅销书,统计历年来四六级、托福考试中出现的高频词汇,学生根据词频来记单词,这种方式深受大家喜欢。这就是一个把编程技能用来解决实际问题的典型场景。

所以,哪怕你不是程序员,如果能掌握编程技能的话,也能给你的工作带来极大的便利。

另外,在做数据分析时,那些词云效果本质上都是基于词频统计来控制字体的大小,如果你能熟练运用Python中的知识来解决问题的话,那说明你真正入门Python了。

分析:

本题主要考察以下几个方面的知识点:

1、如何正确读写文件

在 Python 中读写文件可以使用内置函数open(),而 open 函数在python2 和 python3 中有一定的区别,比如 Python 中可以指定读写文件的编码格式,而 Python 则不可以,为了同时兼容2和3,我们通常会使用io模块下面的 open 函数,大家可以查文档搞清楚它们之间的区别,培养主动学习能力和查资料的习惯。

另外一点是读写文件完成之后是需要关闭文件描述符的,除了可以使用 try...except...finally的语法之后,我们还可以使用更优雅的 with … as 的语法来自动关闭文件。

2、如何对数据进行排序

sorted函数是一个使用频率很高的内置函数,它的用法也很强大,因为它可以通过指定参数 key 来进行自定义排序,也就意味着你不仅可以对数字排序、对字母排序、还可以对列表、字典、自定义的对象进行排序,你只需要要告诉 sorted 函数的排序规则是什么,比如一个people对象,我既可以根据年龄排序也可以根据身高体重来排序,所以这个函数时非常灵活的,另外,对于列表对象有自带的 sort 方法,如果能区分清楚 list.sort 与 sorted 之间区别那说明你已经能灵活运用了。

 3、匿名函数的使用

刚说了sorted函数可以指定一个参数来控制排序的规则,这个参数可以是一个函数,这种场景往往匿名函数,就是我们常说的lambda函数显得很应景。

4、字典类型的运用

做词频统计,用字典无疑是最合适的数据类型,单词作为字典的key, 单词出现的次数作为字典的 value,很方便地就记录好了每个单词的频率,字典很像我们的电话本,每个名字关联一个电话号码。另外,字典最大的特点就是它的查询速度会非常快。理想情况下时间复杂度为O(1),我是说理想情况,如果你想深入了解字典的话,建议看看这篇文章。Python中提供了丰富的数据结构,要懂得根据应用场景正确选择合适的数据类型

5、正则表达式的运用

处理文本、字符串,正则表达式简直是神器,无论是做数据爬虫还是表单验证使用非常广泛,当然,正则表达式并不是 Python 特有的东西,所有编程语言都支持,我们除了学习正则表达式的基本规则之外就是Python中的re模块提供的各种函数了,只有熟悉了API 我们才能运用到实际场景中去。关于正则表达式推荐一篇文章:Python正则表达式操作指南

以上5点,每个点都可以整理出一篇文章出来

实现:

分析完之后,我们实现起来其实是非常快的。所以我们在拿到一个需求的时候,首先肯定是把需求弄清楚,想想大概可以用哪些技术来实现,随后才是动手写代码,其实我们在工作上,真正写代码的时间还不到一半。

# -*- coding:utf-8 -*-
import io
import re

class Counter:
 def __init__(self, path):
 """
 :param path: 文件路径
 """
 self.mapping = dict()
 with io.open(path, encoding="utf-8") as f:
 data = f.read()
 words = [s.lower() for s in re.findall("\w+", data)]
 for word in words:
 self.mapping[word] = self.mapping.get(word, 0) + 1

 def most_common(self, n):
 assert n > 0, "n should be large than 0"
 return sorted(self.mapping.items(), key=lambda item: item[1], reverse=True)[:n]

if __name__ == '__main__':
 most_common_5 = Counter("importthis.txt").most_common(5)
 for item in most_common_5:
 print(item)
#注:这里的文件是以Python之禅的19条格言保存到文本中进行统计的。

打印结果:

('is', 10)
('better', 8)
('than', 8)
('the', 6)
('to', 5)

总结

当然,实现方法不是唯一的。比如Python模块本身就提供了一个collections.Counter的类,它继承自dict类,就是用于做统计的,细心的你可能发现了,我实现的这个Counter和collections下面那个Counter很像,其实这就是造轮子,造轮子可以锻炼我们的编程思维,当然在工作上有现成的东西就没必要自己造轮子了,除非你有信心做得更好。你也可以思考假如Python没有提供Counter这个工具,你该怎么做。

另外,该模块还提供一个有序的字典对象 OrderedDict,使用它可以免去我们手动排序的操作。对于上面提及的知识点你是否都了然于心了,如果回答是的话,恭喜你,我想你应该掌握差不多了,进阶吧,如果你还有很多不清楚的地方,那么需要你更多的总结、练习。

来源:python之禅

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python用于url解码和中文解析的小脚本(python url decoder)
Aug 11 Python
python正则表达式去掉数字中的逗号(python正则匹配逗号)
Dec 25 Python
Python 爬虫学习笔记之正则表达式
Sep 21 Python
Python中装饰器兼容加括号和不加括号的写法详解
Jul 05 Python
Python基于win32ui模块创建弹出式菜单示例
May 09 Python
分析经典Python开发工程师面试题
Apr 08 Python
Python完成哈夫曼树编码过程及原理详解
Jul 29 Python
django删除表重建的实现方法
Aug 28 Python
python爬虫库scrapy简单使用实例详解
Feb 10 Python
Python下划线5种含义代码实例解析
Jul 10 Python
Python 的 __str__ 和 __repr__ 方法对比
Sep 02 Python
Python的三个重要函数详解
Jan 18 Python
Python 装饰器实现DRY(不重复代码)原则
Mar 05 #Python
Tensorflow实现卷积神经网络用于人脸关键点识别
Mar 05 #Python
python入门教程 python入门神图一张
Mar 05 #Python
详解TensorFlow在windows上安装与简单示例
Mar 05 #Python
python 中if else 语句的作用及示例代码
Mar 05 #Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
Mar 05 #Python
tf.truncated_normal与tf.random_normal的详细用法
Mar 05 #Python
You might like
PHP使用递归生成文章树
2015/04/21 PHP
PHP生成随机密码方法汇总
2015/08/27 PHP
php监测数据是否成功插入到Mysql数据库的方法
2016/11/25 PHP
jQuery-ui中自动完成实现方法
2010/06/10 Javascript
jquery validate使用攻略 第四步
2010/07/01 Javascript
Javascript 自适应高度的Tab选项卡
2011/04/05 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
2014/01/27 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
2015/11/02 Javascript
javascript如何创建对象
2016/08/29 Javascript
js时间控件只显示年月
2017/01/08 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
vue 弹出遮罩层样式实例
2020/07/22 Javascript
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
[53:23]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
python基础教程之lambda表达式使用方法
2014/02/12 Python
django文档学习之applications使用详解
2018/01/29 Python
Python小游戏之300行代码实现俄罗斯方块
2019/01/04 Python
搞定这套Python爬虫面试题(面试会so easy)
2019/04/03 Python
pycharm新建一个python工程步骤
2019/07/16 Python
7款设计巧妙的css3飘带状3D立体效果的导航菜单和表单窗口
2013/02/04 HTML / CSS
意大利珠宝店:Luxury Zone
2019/01/05 全球购物
单位授权委托书范文
2014/08/02 职场文书
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
卖房协议书样本
2014/10/30 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
常务副总经理岗位职责
2015/02/02 职场文书
心得体会格式及范文
2016/01/25 职场文书