最近在學習網易雲課堂上面的一門課,上面有一道測驗題我覺得很有意思,記錄了下來。
作業詳情:
統計 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 升序,有默認值。
受限筆者微薄的知識基礎,難免有錯誤,歡迎指正。
