提高代碼效率,Python Map的應用技巧

一、Map函數基礎

Python中提供了許多內置函數,其中一個非常實用的函數是map()函數。map()函數是一種可以讓我們更加便捷地處理列表、元組等序列數據類型的函數,它能夠把一個函數作用於序列中的每個元素,返回一個新的序列,例如:

def square(x):
    return x**2
    
print(list(map(square, [1,2,3,4,5]))) #[1, 4, 9, 16, 25]

map()函數接收兩個參數,第一個參數是一個函數,第二個參數是一個序列;map()函數將第一個參數所代表的函數作用於第二個參數(序列)中的每個元素,再返回一個新的序列。在上面的例子中,map(square, [1,2,3,4,5])的作用是將列表[1,2,3,4,5]中的每個數應用square()函數,即返回一個新的列表[1,4,9,16,25]。

二、將Map與Lambda Expression結合使用

除了使用常規的函數之外,也可以使用lambda expression來代替,例如:

print(list(map(lambda x: x**2, [1,2,3,4,5]))) #[1, 4, 9, 16, 25]

這種方法的好處在於不必定義一個正式函數,它會自動地為我們創建一個匿名函數,將其應用在序列中;而且由於lambda expression是一個輕量級的函數,所以執行起來非常快。

三、一行代碼實現多項運算

有時候我們需要對序列中的每個元素進行多項運算,例如對整數序列執行平方和立方操作,可以通過以下方式實現:

lst = range(1, 6)
print(list(zip(lst, lst, lst))) #[(1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4), (5, 5, 5)]
print(list(map(lambda x: (x[0], x[1]**2, x[2]**3), zip(lst, lst, lst))))
#[(1, 1, 1), (2, 4, 8), (3, 9, 27), (4, 16, 64), (5, 25, 125)]

在上述代碼中,我們使用了zip()函數將序列lst複製了三次,並經過lambda expression的處理,返回了一個由三個元素組成的元組,這個元組代表著這三個元素的平方和立方。由於Python的zip()函數可以接受多個序列作為參數,因此我們只需要傳入一個序列,然後讓zip()複製多少次,這樣就可以讓我們在一行代碼中對同一個序列運用多項操作。

四、列表推導式與Map聯合使用

列表推導式也是Python中的一項強大功能,它可以讓我們快速地生成新的列表,而且代碼非常簡潔,例如:

doubled = [x*2 for x in range(1, 6)] #[2, 4, 6, 8, 10]

但是,有時候列表推導式不太適用,例如在處理嵌套的列表時,此時可以使用嵌套的 map() 和列表推導式,例如:

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print([[row[i] for row in matrix] for i in range(3)]) # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

#使用 Map
print(list(map(lambda x: [row[x] for row in matrix], range(3)))) # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

在上述代碼中,我們使用了兩個列表推導式和一個map()函數來處理嵌套的列表,第一個列表推導式用於構建一個新的列表,該列表是由每個內層列表的第i個元素組成的;第二個列表推導式用於構建一個新的列表,該列表的元素是map()函數的結果,其中參數lambda x: [row[x] for row in matrix]用於對第一層序列中的每個元素應用,也就是說,map()函數的作用是將第一層序列中每個元素中的第i個數提取出來構建一個新的列表。

五、Map函數保持輸入和輸出大小一致

需要強調的是,使用 map() 函數時,無論我們傳入的參數是多少,map() 函數總是保持輸入和輸出大小一致。如果傳入的參數少於序列長度,map() 函數將在遇到序列末尾時停止迭代;如果傳入的參數超出了序列長度,則會填充None。

print(list(map(lambda x,y : x+y , [1, 2, 3], [4, 5]))) # [5, 7]

在上述代碼中,我們傳遞了兩個序列作為參數,並且一個序列中的元素多於另一個序列,這時候 map() 函數會按照最短序列的長度來迭代,返回一個新的列表。在此例中,由於序列 [4, 5] 只有兩個元素,所以map()函數只會迭代三次,並將序列 [1, 2, 3] 中超出的元素忽略掉。

六、總結

在Python中,map()函數是一種非常實用的函數,它可以對序列中的每個元素應用一個函數,返回一個新的列表。除此之外,lambda expression和列表推導式也是Python編寫高效代碼的必備工具之一。通過運用這些工具,我們可以快速、高效地處理序列數據類型,為數據科學和機器學習領域所提供的演算法和模型提供支持。

原創文章,作者:GAKQ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/137902.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
GAKQ的頭像GAKQ
上一篇 2024-10-04 00:18
下一篇 2024-10-04 00:18

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29

發表回復

登錄後才能評論