一、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-hant/n/137902.html