您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何進行Python字典的消除繁瑣的if判斷,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
根據不同的條件進行不同的計算或操作,是很常見的需求。Python 有 if 語句可以實現。但是一旦分支很多,多個 if 就是使你眼花繚亂。
我們有許多技巧(套路)來簡化這一過程。我會一連幾篇文章,從簡單到復雜,教你如何理解和應用這些技巧。
動態調用不同的函數
先看數據:
列[計算方式],決定了列[調整]的計算結果
每一種計算方式如下:
看過我之前文章【為什么你總是學不會Python,入門Python的4大陷阱ython,因為你全掉坑了】的小伙伴已經學聰明了,為每一種計算單獨定義了函數:
但是,該怎么調用這些函數呢?
"很簡單呀,判斷,然后調用":
行9:為了防止出現遺漏的計算方式
這看起來不錯,但是,每新增一種方式,就要在這里追加一個判斷,一旦分支很多,這里的代碼就會非常冗長:
為什么我一直讓每一塊代碼盡可能簡短?
因為我們每次處理一個獨立小問題會比處理大問題要高效得多,大問題意味著涉及很多小問題。同時解決多個小問題,會讓我們的大腦短路。
如果我們可以這樣子定義計算方式與函數的關系,那就很舒服了:
"這看著有點眼熟,不就是字典嗎?"
對,字典就是用來表達這種一對一關系的最佳結構。
你可以把字典當作是一個過目不忘(死記硬背)的記憶高手,只要他過一遍數據之后,你給他一個 key 值,他能馬上找出對應的 value 值給你。
于是,我們可以把計算方式與定義的每個函數給他記憶:
接下來,真正處理每一行數據的時候,只需要讓他(字典)取出函數,然后調用即可:
行2-4:特別要注意,字典的 value 我們只是給了函數名字,千萬別在后面加括號,括號是表示執行函數。現在我們不需要執行函數呢
調用的時候,別忘記給函數傳入需要計算的指標
不僅代碼簡單了,如果你有留意左下角的運行時間,你會發現這種方式比之前的方式提速了
現在我們的代碼挺不錯,如果數據中出現了新的計算方式,但我們忘記加入字典,那么代碼運行就會報錯:
行4:注釋掉,相當于我們忘記定義計算方式C
可以看到錯誤信息,能讓我們馬上聯想到原因
"一舉兩得,太完美了!"
但是,如果你跟我學習 pandas ,就會知道,pandas 中盡可能避免自己遍歷處理數據。
pandas 的簡潔程度與計算效率不是我們自己遍歷處理可以比得過。
這個例子中,每一種的計算方式的區別僅僅在于后面的系數:
這種情況下,其實我們可以先批量把每一行對應的系數取出來,然后直接計算:
注意執行時間,又提速了
別以為這只是 pandas 把 for 遍歷給你寫了而已,他是基于 numpy 的,而numpy處理時都是基于 c++ 的調用,性能非常快速
這種方式其實也有他的缺點:
Series.map 方法的確做了字典取值做的事情,但是在他找不到key時,是不會報錯的。我們需要后續通過判斷 nan 來檢查
有時候計算邏輯沒有這么簡單,比如需要看銷量是否超過同地區的平均值做出不同的計算分支。這時候使用 pandas 的方式就會感覺邏輯被分散(下一節我們來看看這種情況下的處理)
"那么,之前的字典聲明方式,是不是就是這種場景下最通用的方式?"
用字典聲明對應關系其實已經非常好了,但是如果能在定義函數的地方上直接標記對應關系,那么也挺好:
不再需要定義字典關系了
怎么可以做到這種效果呢?有興趣的小伙伴不妨試試。
上述內容就是如何進行Python字典的消除繁瑣的if判斷,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。