<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      Python怎么統計字母出現的次數

      [摘要]這次給大家帶來Python怎么統計字母出現的次數,Python統計字母出現次數的注意事項有哪些,下面就是實戰案例,一起來看一下。題目:統計一個文件中每個單詞出現的次數,列出出現頻率最多的5個單詞。前...
      這次給大家帶來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、字典數據類型的運用

      做詞頻統計,用字典無疑是最合適的數據類型,單詞作為字典的key, 單詞出現的次數作為字典的 value,很方便地就記錄好了每個單詞的頻率,字典很像我們的電話本,每個名字關聯一個電話號碼。另外,字典最大的特點就是它的查詢速度會非?臁@硐肭闆r下時間復雜度為O(1),我是說理想情況,如果你想深入了解字典的話,建議看看這篇文章 https://www.laurentluce.com/posts/python-dictionary-implementation/

      4、正則表達式的運用

      對文本、字符串處理,正則表達式簡直是神器,無論是做數據爬蟲還是數據清洗使用非常廣泛,當然,正則表達式并不是Python特有的東西,所有編程語言都支持,我們要做的除了學習正則表達式還有他的API,只有熟悉了API我們才能運用到實際場景中去。關于正則表達式推薦一篇文章:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html ,另外我還發現有同學引入了jieba分詞庫,這個庫在做中文分詞非常有用,感興趣的可以去了解一下。

      實現

      分析完之后,我們實現起來其實是非?斓摹K晕覀冊谀玫揭粋需求的時候,首先肯定是把需求弄清楚,想想大概可以用哪些技術來實現,隨后才是動手寫代碼,其實我們在工作上,真正寫代碼的時間還不到一半。

      # -*- 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)

      打印結果:

      ('is', 10)
      ('better', 8)
      ('than', 8)
      ('the', 6)
      ('to', 5)

      總結

      我在看大家代碼的時候,很多代碼依然存在有命名不規范(建議讀PEP8),代碼的排版混亂(閱讀起來很困難,建議用Pycharm進行格式化)。還有不少代碼的實現方式看起來很復雜(往往越復雜的代碼Bug越多)。當然,實現方法不是唯一。

      比如Python模塊本身就提供了一個collections.Counter的類,它繼承自dict類,就是用于做統計的,我發現有部分同學使用的就是這個類來實現的,細心的你可能發現了,我實現的這個Counter和collections下面那個Counter很像,其實這就是造輪子,造輪子可以鍛煉我們的編程思維,當然在工作上有現成的東西就沒必要自己造輪子了,除非你有信心做得更好。你也可以思考思考,假如Python沒有提供Counter這個工具,你該怎么做。

      另外,該模塊還提供一個有序的字典對象 OrderedDict,使用它可以免去我們手動排序的操作。最后建議大家學習總結上面我提到的所有內容。如果你能堅持100天,相信你對Python的掌握程度是游刃有余的。

      相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

      推薦閱讀:

      Python中怎樣把矩陣轉換為列表

      在python中列表,數組,矩陣互相轉換的方法

      以上就是Python怎么統計字母出現的次數的詳細內容,更多請關注php中文網其它相關文章!


      學習教程快速掌握從入門到精通的SQL知識。




      日韩精品一区二区三区高清