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