成人av在线资源一区,亚洲av日韩av一区,欧美丰满熟妇乱XXXXX图片,狠狠做五月深爱婷婷伊人,桔子av一区二区三区,四虎国产精品永久在线网址,国产尤物精品人妻在线,中文字幕av一区二区三区欲色
    您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
    此為臨時鏈接,僅用于文章預覽,將在時失效
    人工智能開發者 正文
    發私信給skura
    發送

    0

    Python編程技巧:如何用Map, Filter, Reduce代替For循環?

    本文作者: skura 2019-12-24 10:44
    導語:for循環很重要,但太多的for循環可能并不是好事

    Python編程技巧:如何用Map, Filter, Reduce代替For循環?

    你是否有過這樣的經歷,你查看自己寫的代碼并看到滿眼的 for 循環?你發現你必須斜著你的眼睛,并將腦袋前傾到你的顯示器,以看得更清楚。

    反正我有過這樣的經歷。

    for 循環就像是一把瑞士軍刀,它可以解決很多問題,但是,當你需要掃視代碼,快速搞清楚代碼所做的事情時,它們可能會讓人不知所措。

    map、filter 和 reduce 這三種技術可以提供描述迭代原因的函數替代方案,以便避免過多的 for 循環。我之前在 JavaScript 中寫過這些技術的入門文章,但是它們在 Python 中的實現略有不同。

    我們將簡要介紹這三種技術,主要介紹它們在 JavaScript 和 Python 中的語法差異,然后給出如何轉換 for 循環的示例。

    什么是 Map、Filter 和 Reduce?

    回顧我以前編寫的代碼,我意識到 95% 的時間都花在遍歷字符串或數組上。在這種情況下,我會執行以下操作之一:將一系列語句映射到每個值,篩選滿足特定條件的值,或將數據集減少為單個聚合值。

    有了這種洞察力,你就可以識別和實現這三種方法,即循環遍歷通常屬于這三種功能類別之一:

    • Map:對每個項應用相同的步驟集,存儲結果

    • Filter:應用驗證條件,存儲計算結果為 True 的項

    • Reduce:返回一個從元素傳遞到元素的值

    為什么 Python Map/Filter/Reduce 會不一樣?

    在 Python 中,這三種技術作為函數存在,而不是數組或字符串類的方法。這意味著,你將編寫 map(function, my_list),而不是編寫 my_array.map(function)。

    此外,每個技術都需要傳遞一個函數,該函數將執行每個項目。通常,該函數是作為匿名函數(在 JavaScript 中稱為 arrow 頭函數)編寫的。但是,在 Python 中,你經常看到被使用的是 lambda 表達式。

    lambda 表達式和 arrow 函數之間的語法實際上非常相似。將 => 替換為 : 并確保使用關鍵字 lambda,其余的幾乎相同。

    // JavaScript Arrow Function
    const square = number => number * number;


    // Python Lambda Expression
    square = lambda number: number * number

    arrow 函數和 lambda 表達式之間的一個關鍵區別是,arrow 函數能夠通過多個語句擴展成完整的函數,而 lambda 表達式僅限于返回的單個表達式。因此,在使用 map()、filter()或 reduce()時,如果需要對每個項執行多個操作,請先定義函數,然后再包含它。

    def inefficientSquare(number):
       result = number * number
       return result


    map(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)


    # square all 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 import reduce

    numbers = [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()必須從 Python 3 以上版本中的函數庫導入

    • lambda 表達式是所有三個函數中的第一個參數,iterable 是第二個參數

    • reduce()的 lambda 表達式需要兩個參數:累加器(傳遞給每個元素的值)和單個元素本身

    記住,for 循環在代碼中確實是很重要的,但是擴展工具包從來都不是壞事。

    via:https://medium.com/better-programming/how-to-replace-your-python-for-loops-with-map-filter-and-reduce-c1b5fa96f43a

    雷鋒網雷鋒網雷鋒網

    雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知

    Python編程技巧:如何用Map, Filter, Reduce代替For循環?

    分享:
    相關文章
    當月熱門文章
    最新文章
    請填寫申請人資料
    姓名
    電話
    郵箱
    微信號
    作品鏈接
    個人簡介
    為了您的賬戶安全,請驗證郵箱
    您的郵箱還未驗證,完成可獲20積分喲!
    請驗證您的郵箱
    立即驗證
    完善賬號信息
    您的賬號已經綁定,現在您可以設置密碼以方便用郵箱登錄
    立即設置 以后再說