日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

map for循环_如何用Map、Filter和Reduce替换Python For循环?

發布時間:2025/3/19 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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,剩下的幾乎就完全相同。

  • // JavaScript Arrow Function
  • const square = number => number * number;// Python Lambda Expression
  • square = lambda number: number * number
  • Lambda表達式和箭頭函數之間的一個關鍵區別是,箭頭函數可以擴展成有多個語句的完整函數,而lambda表達式只限于一個能返回的表達式。因此當使用map(), filter()或 reduce()時,如果需要對每個項執行多個操作,需要先定義函數,再把函數使用進去。

  • def inefficientSquare(number):
  • result = number * number
  • return resultmap(inefficientSquare,my_list)
  • 替換For循環

    下面是三個常見的For循環示例,分別用map, filter和 reduce替換掉。編程目的:計算列表中奇數的平方和。

    首先是基本的For循環示例。請注意:這純粹是為了演示,即使沒有map/filter/reduce也可以改進它。

  • numbers = [1,2,3,4,5,6]
  • odd_numbers = []
  • squared_odd_numbers = []
  • total = 0# filter for odd numbers
  • for number in numbers:
  • if number % 2 == 1:
  • odd_numbers.append(number)# squareall odd numbers
  • for number in odd_numbers:
  • squared_odd_numbers.append(number *number)# calculate total
  • for number in squared_odd_numbers:
  • total += number# calculate average
  • 將每個步驟替換為一個函數:

  • from functools importreducenumbers = [1,2,3,4,5,6]odd_numbers = filter(lambda n: n % 2 == 1,numbers)squared_odd_numbers = map(lambda n: n * n, odd_numbers)total =reduce(lambda acc, n: acc + n, squared_odd_numbers)
  • 有幾個重要語法要點需要強調。

    · map() 和 filter() 原生可用。但是reduce() 必須從 Python3+中的functools 庫里導入。

    · Lambda表達式是所有三個函數里的第一個參數,而迭代表達式是第二個參數。

    · reduce()的Lambda表達式需要兩個參數: accumulator (傳遞給每個元素的值)和單個元素本身。

    圖源:Unsplash

    誠然,For循環在代碼中不可或缺,但是過度使用未免有點單調,學習新知識為自己的代碼錦上添花,不是更好嗎?

    畢竟,學習新知識可不是壞事,小芯更不是什么魔鬼。(壞笑)

    最后,衷心祝愿大家遠離洪水般的For循環。

    留言點贊關注

    我們一起分享AI學習與發展的干貨

    如轉載,請后臺留言,遵守轉載規范

    總結

    以上是生活随笔為你收集整理的map for循环_如何用Map、Filter和Reduce替换Python For循环?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。