統計一篇小說中各單詞出現的次數


最近在學習網易雲課堂上面的一門課,上面有一道測驗題我覺得很有意思,記錄了下來。

作業詳情:

統計 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 升序,有默認值。

 

受限筆者微薄的知識基礎,難免有錯誤,歡迎指正。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM