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

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

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

这个问题在知识星球也同样被问,于是在那里我们设了每日一题的专题,每周会出三道题给大家,做完之后要求提交到 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入门神图一张
  • Python入门教程 超详细1小时学会Python
  • Python中的Numpy入门教程
  • 一篇不错的Python入门教程
  • Python入门篇之函数
  • Python入门
  • Python类的基础入门知识
  • Python3 入门教程 简单但比较不错
  • Python的ORM框架SQLAlchemy入门教程
  • wxPython 入门教程
(0)

相关推荐

  • Python入门篇之函数

    Pythond 的函数是由一个新的语句编写,即def,def是可执行的语句--函数并不存在,直到Python运行了def后才存在. 函数是通过赋值传递的,参数通过赋值传递给函数 def语句将创建一个函数对象并将其赋值给一个变量名,def语句的一般格式如下: 复制代码 代码如下: def function_name(arg1,arg2[,...]):     statement [return value] 返回值不是必须的,如果没有return语句,则Python默认返回值None. 函数名的命

  • 一篇不错的Python入门教程

    原文 http://www.hetland.org/python/instant-hacking.php Instant Hacking[译文] 译者: 肯定来过 这是一篇简短的关于python程序设计语言的入门教程,原文在这里,翻着词典翻译了来! 这是一份对编程艺术的简短介绍,其中的例子是用python写成的.(如果你已经知道了该如何编程,但是想简单了解一下python,你可以查阅我的另一篇文章Instant Python.)这篇文章已经被翻译为意大利.波兰.日本.塞尔维亚以及巴西葡萄亚语等许

  • Python的ORM框架SQLAlchemy入门教程

    SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合:而对象集合的抽象又重要于表和行. 一 安装 SQLAlchemy 复制代码 代码如下: pip install sqlalchemy 导入如果没有报错则安装成功 复制代码 代码如下: >>> import sqlalchemy>>> sqlalchemy.__version__'0.9.1'>>> 二 使用 sqlalchemy对数据库操作 1. 定义元信息,绑定到引擎 复制代码 代

  • Python3 入门教程 简单但比较不错

    本文适合有Java编程经验的程序员快速熟悉Python 本文程序在windows xp+python3.1a1 测试通过. 本文提到的idle指python shell,即安装python后你在菜单看到的IDLE(python gui) 在idle里ctrl+n可以打开一个新窗口,输入源码后ctrl+s可以保存,f5运行程序. 凡打开新窗口即指ctrl+n的操作. 1 你好 复制代码 代码如下: #打开新窗口,输入: #! /usr/bin/python # -*- coding: utf8 -

  • Python中的Numpy入门教程

    1.Numpy是什么 很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数.如果接触过matlab.scilab,那么numpy很好入手. 在以下的代码示例中,总是先导入了numpy: 复制代码 代码如下: >>> import numpy as np>>> print np.version.version1.6.2

  • Python类的基础入门知识

    复制代码 代码如下: class Account(object): "一个简单的类" account_type="Basic" def __init__(self,name,balance): "初始化一个新的Account实例" self.name=name self.balance=balance def deposit(self,amt): "存款" self.balance=self.balance+amt def w

  • Python入门第1/10页

    第一章 介绍 脚本语言是类似DOS批处理.UNIX shell程序的语言.脚本语言不需要每次编译再执行,并且在执行中可以很容易地访问正在运行的程序,甚至可以动态地修改正在运行的程序,适用于快速地开发以及完成一些简单的任务.在使用脚本语言时常常需要增的新的功能,但有时因为脚本语言本来就已经很慢.很大.很复杂了而不能实现:或者,所需的功能涉及只能用C语言提供的系统调用或其他函数--通常所要解决的问题没有重要到必须用C语言重写的程度:或者,解决问题需要诸如可变长度字符串等数据类型(如文件名的有序列表)

  • python入门教程 python入门神图一张

    初试牛刀 假设你希望学习Python这门语言,却苦于找不到一个简短而全面的入门教程.那么本教程将花费十分钟的时间带你走入Python的大门.本文的内容介于教程(Toturial)和速查手册(CheatSheet)之间,因此只会包含一些基本概念.很显然,如果你希望真正学好一门语言,你还是需要亲自动手实践的.在此,我会假定你已经有了一定的编程基础,因此我会跳过大部分非Python语言的相关内容.本文将高亮显示重要的关键字,以便你可以很容易看到它们.另外需要注意的是,由于本教程篇幅有限,有很多内容我会

  • Python入门教程 超详细1小时学会Python

    为什么使用Python    假设我们有这么一项任务:简单测试局域网中的电脑是否连通.这些电脑的ip范围从192.168.0.101到192.168.0.200. 思路:用shell编程.(Linux通常是bash而Windows是批处理脚本).例如,在Windows上用ping ip 的命令依次测试各个机器并得到控制台输出.由于ping通的时候控制台文本通常是"Reply from ... " 而不通的时候文本是"time out ... " ,所以,在结果中进行

  • wxPython 入门教程

    这篇文章是关于 wxPython,但 wxPython 实际是两件事物的组合体:Python 脚本语言和 GUI 功能的 wxWindows 库(关于 wxWindows 的介绍,请参阅 developerWorks上的 "细述 wxWindows" ).wxWindows 库是为了最大可移植性的 C/C++ 库,而抽取 GUI 功能.所以 wxWindows 应用程序与生俱来地可以运行在 Windows.带 X.KDE 或 Gnome 的 UNIX 或者 wxWindows 已移植到

随机推荐