Python map() 函數,舉例說明

已發表: 2022-08-25

在本教程中,您將學習如何使用Python map() 函數將函數應用於可迭代的所有項。

Python 支持函數式編程範式,允許您以編程方式將任務定義為函數的計算。 您可以將 Python 函數視為對象:一個函數可以將另一個函數作為參數並返回另一個函數。

map()函數接受一個函數作為參數,並允許您將其應用於序列中的所有項目。

在本教程結束時,您將能夠使用 Python 的map()函數——重寫詳細循環和列表推導。 您將編寫幾個示例來了解使用map()函數的不同方式。

如何將函數應用於 Python 列表的元素

將函數應用於 Python 列表的元素

讓我們從一個例子開始我們的討論。

這裡nums是一個數字列表。

 nums = [2,4,3,7]

接下來,考慮函數self_pow() 。 函數self_pow()接受一個數字作為參數,並返回該數字本身的冪次冪:n**n。

在 Python 中,** 是求冪運算符。 a**b 返回 a 的 b 次冪 a b的值。

 def self_pow(n): return n**n

TO-DO :通過將函數self_pow()應用於列表nums中的每個元素來創建一個新列表nums_pow

使用 for 循環

為此,您可以在 Python 中使用 for 循環:

  • 對於nums列表中的每個數字,以num作為參數調用函數self_pow()
  • 將函數調用的結果附加到新列表nums_pow
 nums_pow = [] for num in nums: nums_pow.append(self_pow(num)) print(nums_pow)

在輸出中,每個數字nums都被提升為自身。 nums_pow列表中的元素如下: 2 2 , 4 4 , 3 3 ,7 7

 Output [4, 256, 27, 823543]

使用列表理解

您可以使用列表推導來簡潔明了。 從上面的顯式 for 循環中,我們可以識別輸出表達式和要循環的列表。

python-map-function-motivation

然後我們可以修改通用列表推導表達式:

 new_list = [<output expression> for item in iterable]

生成nums_pow列表的列表推導表達式如下:

 nums_pow = [self_pow(num) for num in nums] print(nums_pow)

正如預期的那樣,輸出與使用 for 循環的輸出相同。

 Output [4, 256, 27, 823543]

您可以使用 Python 的map()函數代替循環和列表推導,其語法簡潔,有助於將該函數應用於迭代中的所有項目。 讓我們從學習 map 函數的語法開始。

Python map() 函數語法

Python map() 函數語法

使用的一般語法 Python map()函數如下:

 map(function, iterable_1,[iterable_2,...,iterable_n])

map()函數至少接受兩個參數,一個函數和一個可迭代的。

在上面的語法中:

  • function表示 Python 函數,或者通常是任何 Python 可調用函數。 這包括用戶定義和內置函數、類、實例和類方法等。
  • iterable是任何有效的 Python 可迭代對象,例如列表、元組和字符串。
  • map() 函數將該函數應用於可迭代對像中的每個項目

map() 函數返回什麼?

它返回一個地圖對象。 然後,您可以使用以下語法將地圖對象轉換為列表: list(map(function,iterable)).

根據用例,您可以將其轉換為 Python 元組。

map() 函數返回什麼

現在您已經了解了 Python map()函數的語法,讓我們開始編寫示例。

您應該使用 Python 3.x 來學習本教程。 否則,您可以在 Geekflare 在線 Python 編輯器中運行代碼片段。

如何將 map() 函數與用戶定義的函數一起使用

將 map() 函數與用戶定義的函數一起使用

#1 。 以前,我們將self_pow()函數應用於nums列表中的每個數字。 在map()函數的語法中,我們可以傳入函數self_pow和列表nums作為參數。

注意:您應該只指定函數的名稱而不是函數調用。 使用self_pow而不是self_pow()

map()函數返回一個地圖對象。

 print(map(self_pow,nums)) <map object at 0x7f7d315c14d0>

然後,我們可以使用 list() 函數將地圖對象轉換為列表,如下所示。

 nums_pow = list(map(self_pow,nums)) print(nums_pow)

這是nums中的每個num映射到nums_pow列表中的 num num的輸出。

 Output [4, 256, 27, 823543]

#2 。 考慮以下將英寸轉換為厘米的函數inch_to_cm()1 英寸 = 2.54 厘米

 def inch_to_cm(inch): return inch*2.54

要將inches列表中的英寸值轉換為厘米,您可以使用map()函數,如下面的代碼單元所示。

 inches = [5.54,3.4,1,25,8.2] cms = list(map(inch_to_cm,inches)) print(cms)

cms列表包含以厘米表示的英寸值。

 Output [14.0716, 8.636, 2.54, 63.5, 20.828]

如何使用帶有內置函數的 map() 函數

使用帶有內置函數的 map() 函數

在本節中,我們將學習如何在 Python 中將map()與內置函數一起使用。

#1 。 列表strings是編程語言的列表。 您想創建一個新的列表strings_upper ,其中包含大寫的編程語言字符串。

 strings = ['JavaScript','Rust','Python','Go']

內置字符串方法.upper()作用於字符串並返回大寫格式的副本。

 strings_upper = list(map(str.upper,strings)) print(strings_upper)

列表strings_upper包括以大寫格式格式化的列表strings中的字符串。

 Output ['JAVASCRIPT', 'RUST', 'PYTHON', 'GO']

#2 。 Python 中的內置len()函數將序列作為參數並返回其長度。 要查找strings列表中每個字符串的長度,我們可以使用map()函數並將長度函數應用於每個字符串,如下所示。

 strings_len = list(map(len,strings)) print(strings_len)
 Output [10, 4, 6, 2]

#3 。 您可以將map()函數與元組等其他集合一起使用。

以下示例包含一個元組,其中包含有關臥室數量、面積和房屋所在城市的信息。

在 Python 中, type()函數返回任何 Python 對象的數據類型。 要獲取此元組中所有項的數據類型,可以使用map()函數對每個元組項調用type函數。

 house = (2,758.5,'Bangalore') house_elt_type = tuple(map(type,house)) print(house_elt_type)

我們已將地圖對象轉換為元組。 您還可以投射到列表或任何其他集合中。

在下面的輸出中,我們看到 2、758.5 和 Bangalore 的數據類型已分別被推斷為“int”、“float”和“str”。

 Output (<class 'int'>, <class 'float'>, <class 'str'>)

#4 。 在 Python 中,您可以導入內置模塊並使用模塊中定義的函數。

要計算nums列表中每個數字的平方根,您可以使用 math 模塊中的平方根函數sqrt

 import math nums = [30,90,34,45,97] nums_sqrt = list(map(math.sqrt,nums)) print(nums_sqrt)
 Output [5.477225575051661, 9.486832980505138, 5.830951894845301, 6.708203932499369, 9.848857801796104]

上面的輸出很難解析和遵循。 您可能希望將每個平方根值四捨五入到小數點後兩位。

如何在 Python 中對浮點數進行舍入

讓我們定義一個函數round_2() ,它接受一個浮點值並將其四捨五入到小數點後兩位。

 def round_2(num): return round(num,2)

現在,您可以將map()函數與round_2nums_sqrt列表一起使用。

 nums_sqrt_round = list(map(round_2,nums_sqrt)) print(nums_sqrt_round)
 Output [5.48, 9.49, 5.83, 6.71, 9.85]

您還可以使用嵌套的map()函數,其中內部 map 函數用於計算平方根list nums_sqrt ,而外部 map 函數執行舍入操作。

 nums_sqrt_round = list(map(round_2,list(map(math.sqrt,nums)))) print(nums_sqrt_round)
 Output [5.48, 9.49, 5.83, 6.71, 9.85]

上述兩種方法的輸出是相同的。 但是,您應該確保在嵌套函數時代碼可讀和可維護,如上所示。

如何在 Lambda 函數中使用 map() 函數

將 map() 函數與 Lambda 函數一起使用

在前面的部分中,您學習瞭如何將 Python map()函數與內置函數和用戶定義函數一起使用。 您現在將學習如何將 map() 函數與 lambda 函數一起使用,這些函數在 Python 中是匿名的。

有時,您將擁有一個函數,其主體僅包含一行代碼,並且您可能只需要使用該函數一次,而無需在程序的其他地方引用它。 您可以在 Python 中定義諸如lambda 函數之類的函數。

注意lambda args: expression是使用 Python lambda 函數的通用語法。

#1 。 考慮以下列表strings 。 假設你想得到一個列表strings_rev - 包含每個字符串的反向副本。

 strings = ['JavaScript','Rust','Python','Go']

我們可以使用字符串切片來反轉 Python 字符串。

注意:這是字符串切片表達式str[start:stop:step]的概括。

– 如果沒有startstop值,則切片從字符串的開頭開始並一直延伸到字符串的結尾。
step的負值給出從字符串末尾開始的切片。
– 因此, str[::-1]返回 str 的反向副本。

您可以使用這個 lambda 函數: lambda x:x[::-1]在 map 函數中,如下所示。

 strings_rev = list(map(lambda x:x[::-1],strings)) print(strings_rev)

與其他示例一樣,我們將地圖對象轉換為列表。 在輸出中,我們看到列表 strings 中的每個字符串都已反轉。

 Output ['tpircSavaJ', 'tsuR', 'nohtyP', 'oG']

#2 。 在上一節中,我們計算了數字列表中每個數字的平方根,然後將每個平方根值四捨五入到小數點後兩位。

我們使用函數round_2()來做到這一點。 讓我們將round_2()函數重寫為 lambda 函數,並將其與下面描述的map()函數一起使用。

 nums_sqrt_round_l =list(map(lambda num:round(num,2),nums_sqrt)) print(nums_sqrt_round_l)

如下所示,輸出與我們使用round_2()函數獲得的結果相同。

 Output [5.48, 9.49, 5.83, 6.71, 9.85]

如何使用具有多個可迭代對象的 map() 函數

使用帶有多個可迭代對象的 map() 函數

在我們看到的示例中,我們將一個函數應用於恰好一個可迭代的所有項目。

有時,我們可能有接受兩個或更多參數的函數。 在這種情況下,每個參數都存儲在一個列表或任何類似的集合中。

我們還可以將 Python map() 函數與多個列表一起使用。

#1 考慮以下函數area() ,它接受lengthbreadth作為輸入並返回區域length*breadth

 def area(length,breadth): return length*breadth

不同矩形的長度和寬度分別存儲在兩個單獨的列表中, lengthsbreadths

 lengths = [4,8,10,18] breadths = [9,4,6,11]

我們可以使用map()函數通過傳入lengthsbreadths列表來對上述列表應用面積函數。

 areas = list(map(area,lengths,breadths)) print(areas)

因為函數區域接受兩個參數,所以長度和寬度值分別使用列表lengths breadths

 Output [36, 32, 60, 198]

#2 。 Python 數學模塊具有 log 函數,可幫助我們計算數字對任何底數的對數。

注意log(x, base)log x的值返回到由值base指定的基數log base x 。 如果未指定底數,則默認底值為e (log 計算自然對數)。

在這個例子中:

  • 列表x對應於您要為其計算對數的值。
  • base列表包含要在對數計算中使用的所有基值。
 x = [2,6,12,10] base = [2,3,2,5]

我們可以使用 Python map() 函數與math.log 、列表、 xbase來獲取新的列表log_x ,如下所示。

 log_x = list(map(math.log,x,base)) print(log_x)

這是輸出。

 Output [1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]

結論

以下是您在本教程中學到的內容的摘要:

  • Python map() 函數至少接受兩個參數:一個函數和一個可迭代對象,語法為map(function, iterable(s))
  • 函數可以是任何有效的 Python 可調用函數。
  • 函數接受k個參數時,將map()函數與函數和每個可迭代的k個參數一起使用。

接下來,學習在 Python 中使用集合。