map for循环_如何用Map、Filter和Reduce替换Python For循环?
全文共2375字,預計學習時長7分鐘
圖源:Unsplash
屏幕前的你,瞅瞅看,你的代碼是不是通篇都是For循環?是不是瞇眼靠近屏幕才能看清自己的代碼?
沒錯,我就是這樣的。(難以切齒)
For循環是解決問題的瑞士軍刀,非常好用,但是當瀏覽代碼想看看自己做了什么的時候,它們會把你淹沒。
此時,Map, filter和 reduce三種技術可以幫到你。
它們可以通過提供描述迭代原因的函數替代選擇,來矯正For循環的狂熱。
圖源:Unsplash
在之前的文章里,小芯有介紹過 JavaScript里使用這些技術,但是在Python中的實現稍許有些不同。
下面將分別簡要介紹三種技術,重點強調它們在JavaScript和Python中的語法不同,然后舉出如何替換常見For循環的示例。
Map, Filter, 和Reduce是什么?
回顧之前寫的代碼,我意識到當循環字符串或數組時,95%的情況下,我都在做如下的事情之一:將系列語句映射(Map)到每個值,過濾(Filter)掉滿足特定情況的值,或者將數據集減少(Reduce)到單個聚合值。
基于這種觀點,這三種方法是識別和實現,因為循環迭代的原因通常對應以下三種功能類型之一:
· Map:對每個項應用相同的步驟集,儲存結果。
· Filter: 應用驗證條件,儲存計算值為True的項。
· Reduce: 返回從一個元素傳遞到另一個元素的值。
是什么讓Map、Filter、Reduce與眾不同?
在Python中,這三種技術易函數的形式存在,而不是Array或String類的方法。這意味著要寫成map(function, my_list)而不是my_array.map(function)。
此外,每個技術都需要傳遞函數,該函數會被每個項執行。通常而言,函數會寫成匿名函數,在JavaScript中叫胖箭頭函數。但是在Python中會經常使用lambda表達式。
Lambda表達式和箭頭函數之間的語法其實非常相似。將=>替換為:,確保使用了關鍵詞lambda,剩下的幾乎就完全相同。
Lambda表達式和箭頭函數之間的一個關鍵區別是,箭頭函數可以擴展成有多個語句的完整函數,而lambda表達式只限于一個能返回的表達式。因此當使用map(), filter()或 reduce()時,如果需要對每個項執行多個操作,需要先定義函數,再把函數使用進去。
替換For循環
下面是三個常見的For循環示例,分別用map, filter和 reduce替換掉。編程目的:計算列表中奇數的平方和。
首先是基本的For循環示例。請注意:這純粹是為了演示,即使沒有map/filter/reduce也可以改進它。
將每個步驟替換為一個函數:
有幾個重要語法要點需要強調。
· map() 和 filter() 原生可用。但是reduce() 必須從 Python3+中的functools 庫里導入。
· Lambda表達式是所有三個函數里的第一個參數,而迭代表達式是第二個參數。
· reduce()的Lambda表達式需要兩個參數: accumulator (傳遞給每個元素的值)和單個元素本身。
圖源:Unsplash
誠然,For循環在代碼中不可或缺,但是過度使用未免有點單調,學習新知識為自己的代碼錦上添花,不是更好嗎?
畢竟,學習新知識可不是壞事,小芯更不是什么魔鬼。(壞笑)
最后,衷心祝愿大家遠離洪水般的For循環。
留言點贊關注
我們一起分享AI學習與發展的干貨
如轉載,請后臺留言,遵守轉載規范
總結
以上是生活随笔為你收集整理的map for循环_如何用Map、Filter和Reduce替换Python For循环?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js input复选框选中父级同时子级也
- 下一篇: maven 设置打包路径为模块_4、Je