自學Python教程【第七十節】map 函數
歡迎大家來到自學Python教程教室,上一講我們學習Python的另外一個知識點Python中變量的作用域的相關知識,這節課我們來了解Python中map 函數的相關內容,來看看吧:
來看兩個問題:
1. 假設有一個數列,如何把其中每一個元素都翻倍?
2. 假設有兩個數列,如何求和?
第一個問題,普通程序員大概會這么寫:
lst_1 = [1,2,3,4,5,6] lst_2 = [] for item in lst_1: lst_2.append(item * 2) print lst_2
Python 程序員大概會這么寫:
lst_1 = [1,2,3,4,5,6] lst_2 = [i * 2 for i in lst_1] print lst_2
這是我在《【Python 第64課】列表綜合》里說到的方法。
今天來說另一種 Python 程序員常用的寫法 -- map:
lst_1 = [1,2,3,4,5,6] def double_func(x): return x * 2 lst_2 = map(double_func, lst_1) print lst_2
map 是 Python 自帶的內置函數,它的作用是把一個函數應用在一個(或多個)序列上,把列表中的每一項作為函數輸入進行計算,再把計算的結果以列表的形式返回。
map 的第一個參數是一個函數,之后的參數是序列,可以是 list、tuple。
所以剛剛那個問題也可以寫成:
lst_1 = (1,2,3,4,5,6) lst_2 = map(lambda x: x * 2, lst_1) print lst_2
這里原數據改為了元組,函數用 lambda 表達式替代。可參考《【Python 第70課】lambda 表達式》,微信中回復 70。
map 中的函數可以對多個序列進行操作。最開始提出的第二個問題,除了通常的 for 循環寫法,如果用列表綜合的方法比較難實現,但用 map 就比較方便:
lst_1 = [1,2,3,4,5,6] lst_2 = [1,3,5,7,9,11] lst_3 = map(lambda x, y: x + y, lst_1, lst_2) print lst_3
map 中的函數會從對應的列表中依次取出元素,作為參數使用,同樣將結果以列表的形式返回。所以要注意的是,函數的參數個數要與 map 中提供的序列組數相同,即函數有幾個參數,就得有幾組數據。
對于每組數據中的元素個數,如果有某組數據少于其他組,map 會以 None 來補全這組參數。
此外,當 map 中的函數為 None 時,結果將會直接返回參數組成的列表。如果只有一組序列,會返回元素相同的列表,如果有多組數列,將會返回每組數列中,對應元素構成的元組所組成的列表。聽上去很繞口是不是……代碼試試看就明白了:
lst_1 = [1,2,3,4,5,6] lst_2 = [1,3,5,7,9,11] lst_3 = map(None, lst_1) print lst_3 lst_4 = map(None, lst_1, lst_2) print lst_4
恭喜您在Python自學的道路上又堅持了一天,今天我們學習了Python中map 函數的相關內容,下節課我們將分享更多Python中的相關內容,敬請關注 !
好啦,今天的分享到這里就結束了,希望大家能夠持續關注馬哥教育官網,每天都會有大量優質內容與大家分享!
聲明:文章來源于網絡,侵刪!