Python刷題之路,怎樣做才能讓技術突飛猛進


比你優秀的人比你還努力

這個世界最可悲的就是 , 比你優秀的人比你還努力

偶然的機會,通過Python認識了一位華為的文職工作人員。起初只是問我,Python初學者看什么書能快速入門。而兩個月過后,她已經開始每天在Leecode上刷題了。雖然有時半夜微信收到她刷題刷到崩潰的消息,或者針對部分Python語法的疑問,但作為一位文職大廠的優秀員工,她卻比很多本該靠着代碼吃飯的人更為努力。

今天這篇文章,就寫給那些希望學習Python,但在刷題路上迷茫或者找不到方向的朋友們。文章僅代表個人觀點,不喜勿噴。

Leecode刷題

起初學習python,我就是秉承着什么好玩學什么的想法,東一榔頭西一棒子的跳着模塊學習。看着很多方面都有所涉及,但遇到正兒八經的開發代碼時,就歇菜了。基礎的字符串、列表、字典操作,都經常出錯。后來才意識到,為了學習模塊而去學習,那只是高屋建瓴,底子差是硬傷。

一開始看到菜鳥教程上有Python100練,就在網上找了個打包好的全套練習題,PDF下載地址在我之前發的文章中:

Python面試的一些心得,與練習題分享

這套題型挺全面的,但是基礎和算法的內容比較少,所以開始去Leecode刷題。今天就借着前幾天這位朋友問的一道題,談談如何在刷題中終結知識,提高刷題效率吧。

刷題案例

在引用朋友的代碼前,提前和她打了個招呼:

我真的是很認真去寫文章的,第一句話只是寒暄而已,大家忽略就好,哈哈….

先來看看這道題,原題地址(https://leetcode-cn.com/problems/reverse-vowels-of-a-string/):

編寫一個函數,以字符串作為輸入,反轉該字符串中的元音字母。
示例 1:
輸入: "hello"
輸出: "holle"
示例 2:
輸入: "leetcode"
輸出: "leotcede"

有時候示例害死人,剛看這兩個示例,你可能以為提供的字符串都是只有兩個元音字母,然后我們找到它們,互換位置即可。其實仔細想想就該明白,字符串肯定是隨機的。然后,我們通過朋友的解題代碼,來一步步分析如何通過刷題,積累技術點,朋友代碼如下:

案例分析

讓我們對這份代碼進行仔細剖析

首先,很多朋友會發現在reverseVowels函數中,入參的定義與我們日常使用的不同(s:str) -> str
在Python中3.5,PEP 484 - Type Hints附加了一個含義:->用於指示函數返回的類型。類型提示與括號內的類型定義語法,都只是建議但不強制,所以很多教材與代碼中,並未添加。大家知道即可….

首先,有一個明顯的問題,在while的第一個if中存在一個continue,仔細看代碼,這里的continue完全用不到…

我們看到代碼定義了i、j兩個列表的index值,用於從兩邊到中間依次遍歷,最終進行替換。但還定義一個result的列表,用於在遍歷過程中一次賦值。可這里,暴露出了一個python變量數值互換的小技巧。a,b =b,a

而代碼中的else:if … 完全可以替換為elif…

下來看看代碼報錯的這一行,乍一看感覺這行代碼應該沒問題啊。創建了一個空列表,然后把string的第0個字符傳輸給這個空列表。為什么會報錯呢?看看下面的代碼就知道了:

最終代碼

整理過剛才的幾個問題點,讓我們最后修改后執行看看:

如果大家在平時做題的時候,能針對每一步都仔細思考下,是否有優化空間,涉及到了那些知識點,那么才算是真正合格的刷題思路。刷題不是追求數量,而是看中是否在刷題過程中有所收獲。

HDC.Cloud 華為開發者大會2020 即將於2020年2月11日-12日在深圳舉辦,是一線開發者學習實踐鯤鵬通用計算、昇騰AI計算、數據庫、區塊鏈、雲原生、5G等ICT開放能力的最佳舞台。

歡迎報名參會https://www.huaweicloud.com/HDC.Cloud.html?utm_source=&utm_medium=&utm_campaign=&utm_content=techcommunity


免責聲明!

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



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