统计一篇小说中各单词出现的次数

最近在学习网易云课堂上面的一门课,上面有一道测验题我觉得很有意思,记录了下来。

作业详情:

统计 THE TRAGEDY OF ROMEO AND JULIET (罗密欧与朱丽叶)英文小说中各单词出现的次数。小说TXT文件下载链接:

链接:https://pan.baidu.com/s/1u2c7O-617MboXSwBHnoOcA 提取码:vX47 

这是一道运用到Python基础知识的题,难点有四个:

  一、要能正确打开文件 。

  二、正确分解出单词列表,如 ['THE', 'TRAGEDY', 'OF', 'ROMEO', 'AND', 'JULIET', 'by', 'William', 'Shakespeare']。

  三、正确得到单词频次字典,如 {'straight;': 1, 'noise.': 1}。

  四、按单词频次逆序输出结果,如 (601, 'the'), (549, 'I'), (468, 'and'), (451, 'to')。

 

我的代码如下:(使用anaconda3中的Jupyter Notebook编辑)

with open(r'C:\Users\17964\Desktop\Work\123456.txt','rb') as file:                 #打开文件,“rb”以二进制文件打开。

    content = file.read()

str = content.split()               #拆分字符串,返回字符串列表

Lz = dict()                           #创建字典数据对象,字典名字为Lz

for s in str:                                   #遍历拆分好的字符串

    Lz[s] = Lz.get(s,0) + 1        #设置键/值 ,当第一次遇到新的s时,将新的s添加到字典中,并初始化其对应数值为0 ,然后+1,即该已经出现过一次,

                                                    第二次遇到同一个s时,返回对应的数值(此时括号内的0不起作用,因为已经初始化过了),然后+1输入。

                                                        +1是每一次都会起作用的,因为不管遇到字典内已经存在的或者不存在的,都需要把这个元素记录下来。

f = zip(Lz.values(),Lz.keys())            #序列合并,返回zip对象,交换键值对的位置

sorted(f,reverse = True)                 #逆序输出

里面有几个函数我觉得需要重点学习下:

1、split()

  将一个字符串分裂成多个字符串组成的列表。通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则仅分隔 num 个子字符串。当不带参数时以空格进行分割,当代参数时,以该参数进行分割。

2、get()

  从字典 中get() 函数返回指定键的值,如果值不在字典中返回默认值,默认为None。

3、zip() 

  (1)将两个序列合并,返回zip对象,可强制转换为列表或字典。

  (2)将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。若传入参数的长度不等,则返回列表的长度和参数中长度最短的对象相同。传入参数的长度不等,则返回列表的长度和参数中长度最短的对象相同。

  (3)zip()配合*号操作符,可以将已经zip过的列表对象解压。

  (4)结合使用zip( )和dict( )可以很方便的反转字典(交换键值对的位置)。

4、sorted()

  对序列进行排序,返回一个排序后的新列表,原数据不改变。reverse的排序规则:reverse = True  降序 , reverse = False 升序,有默认值。

 

受限笔者微薄的知识基础,难免有错误,欢迎指正。

 

posted @ 2018-10-16 22:42  泰初  阅读(3123)  评论(0编辑  收藏  举报