您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Python入門之后的一個練習題”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Python入門之后的一個練習題”這篇文章吧。
題目:
統計一個文件中每個單詞出現的次數,列出出現頻率最多的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入門之后的一個練習題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。