Python入門之後再看點什麼好?,Python入門看點

來源:互聯網
上載者:User

Python入門之後再看點什麼好?,Python入門看點

不止一次在、知乎有讀者朋友跑過來問:看完了基礎書,甚至看兩遍了,但自己寫的時候還是沒思路,我該怎麼辦?

編程在我看來就是一門手藝活,絕不是簡單通過看書就能學會的,跟學遊泳、學車、學鋼琴一個道理,沒別的,掌握了最基本的理論之後就是幹,只有通過大量的練習、實戰才能掌握編程這門技能,之後再回過來頭來繼續深入理論

這個問題在知識星球也同樣被問,於是在那裡我們設了每日一題的專題,每周會出三道題給大家,做完之後要求提交到 GitHub,我會統一對代碼進行 review。這些題一般都是出自於一些真實應用情境,通過這種方式來提高編程水平。

下面這道題我們在星球中的第三題,在你往下翻之前,不妨梳理下你的編程思路。

題目:

統計一個檔案中每個單詞出現的次數,列出出現頻率最多的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、Regex的運用

處理文本、字串,Regex簡直是神器,無論是做資料爬蟲還是表單驗證使用非常廣泛,當然,Regex並不是 Python 特有的東西,所有程式設計語言都支援,我們除了學習Regex的基本規則之外就是Python中的re模組提供的各種函數了,只有熟悉了API 我們才能運用到實際情境中去。關於Regex推薦一篇文章:PythonRegex操作指南

以上5點,每個點都可以整理出一篇文章出來

實現:

分析完之後,我們實現起來其實是非常快的。所以我們在拿到一個需求的時候,首先肯定是把需求弄清楚,想想大概可以用哪些技術來實現,隨後才是動手寫代碼,其實我們在工作上,真正寫代碼的時間還不到一半。

# -*- coding:utf-8 -*-import ioimport reclass 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模組本身就提供了一個collections.Counter的類,它繼承自dict類,就是用於做統計的,細心的你可能發現了,我實現的這個Counter和collections下面那個Counter很像,其實這就是造輪子,造輪子可以鍛煉我們的編程思維,當然在工作上有現成的東西就沒必要自己造輪子了,除非你有信心做得更好。你也可以思考假如Python沒有提供Counter這個工具,你該怎麼做。

另外,該模組還提供一個有序的字典對象 OrderedDict,使用它可以免去我們手動排序的操作。對於上面提及的知識點你是否都瞭然於心了,如果回答是的話,恭喜你,我想你應該掌握差不多了,進階吧,如果你還有很多不清楚的地方,那麼需要你更多的總結、練習。

來源:python之禪

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.