Python map() 函數,舉例說明
已發表: 2022-08-25在本教程中,您將學習如何使用Python map() 函數將函數應用於可迭代的所有項。
Python 支持函數式編程範式,允許您以編程方式將任務定義為函數的計算。 您可以將 Python 函數視為對象:一個函數可以將另一個函數作為參數並返回另一個函數。
map()函數接受一個函數作為參數,並允許您將其應用於序列中的所有項目。
在本教程結束時,您將能夠使用 Python 的map()函數——重寫詳細循環和列表推導。 您將編寫幾個示例來了解使用map()函數的不同方式。
如何將函數應用於 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**nTO-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 循環中,我們可以識別輸出表達式和要循環的列表。

然後我們可以修改通用列表推導表達式:
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()函數如下:
map(function, iterable_1,[iterable_2,...,iterable_n]) map()函數至少接受兩個參數,一個函數和一個可迭代的。
在上面的語法中:
- function表示 Python 函數,或者通常是任何 Python 可調用函數。 這包括用戶定義和內置函數、類、實例和類方法等。
- iterable是任何有效的 Python 可迭代對象,例如列表、元組和字符串。
- map() 函數將該函數應用於可迭代對像中的每個項目
map() 函數返回什麼?
它返回一個地圖對象。 然後,您可以使用以下語法將地圖對象轉換為列表: list(map(function,iterable)).
根據用例,您可以將其轉換為 Python 元組。

現在您已經了解了 Python map()函數的語法,讓我們開始編寫示例。
您應該使用 Python 3.x 來學習本教程。 否則,您可以在 Geekflare 在線 Python 編輯器中運行代碼片段。
如何將 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() 函數

在本節中,我們將學習如何在 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_2和nums_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() 函數

在前面的部分中,您學習瞭如何將 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]的概括。– 如果沒有
start和stop值,則切片從字符串的開頭開始並一直延伸到字符串的結尾。
–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() 函數

在我們看到的示例中,我們將一個函數應用於恰好一個可迭代的所有項目。
有時,我們可能有接受兩個或更多參數的函數。 在這種情況下,每個參數都存儲在一個列表或任何類似的集合中。
我們還可以將 Python map() 函數與多個列表一起使用。
#1 。 考慮以下函數area() ,它接受length和breadth作為輸入並返回區域length*breadth 。
def area(length,breadth): return length*breadth 不同矩形的長度和寬度分別存儲在兩個單獨的列表中, lengths和breadths 。
lengths = [4,8,10,18] breadths = [9,4,6,11] 我們可以使用map()函數通過傳入lengths和breadths列表來對上述列表應用面積函數。
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 、列表、 x和base來獲取新的列表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 中使用集合。
