map函數(shù)

引用自:Crossin的編程教室

來看兩個(gè)問題:

1. 假設(shè)有一個(gè)數(shù)列,如何把其中每一個(gè)元素都翻倍?

2. 假設(shè)有兩個(gè)數(shù)列,如何求和?


第一個(gè)問題,普通程序員大概會(huì)這么寫:

lst_1 = [1,2,3,4,5,6]

lst_2 = []

for item in lst_1:

lst_2.append(item * 2)

print lst_2

Python 程序員大概會(huì)這么寫:

lst_1 = [1,2,3,4,5,6]

lst_2 = [i * 2 for i in lst_1]

print lst_2


今天來說另一種 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ù),它的作用是把一個(gè)函數(shù)應(yīng)用在一個(gè)(或多個(gè))序列上,把列表中的每一項(xiàng)作為函數(shù)輸入進(jìn)行計(jì)算,再把計(jì)算的結(jié)果以列表的形式返回。

map 的第一個(gè)參數(shù)是一個(gè)函數(shù),之后的參數(shù)是序列,可以是 list、tuple。

所以剛剛那個(gè)問題也可以寫成:

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á)式替代。

map 中的函數(shù)可以對(duì)多個(gè)序列進(jìn)行操作。最開始提出的第二個(gè)問題,除了通常的 for 循環(huán)寫法,如果用列表綜合的方法比較難實(shí)現(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ù)會(huì)從對(duì)應(yīng)的列表中依次取出元素,作為參數(shù)使用,同樣將結(jié)果以列表的形式返回。所以要注意的是,函數(shù)的參數(shù)個(gè)數(shù)要與 map 中提供的序列組數(shù)相同,即函數(shù)有幾個(gè)參數(shù),就得有幾組數(shù)據(jù)。

對(duì)于每組數(shù)據(jù)中的元素個(gè)數(shù),如果有某組數(shù)據(jù)少于其他組,map 會(huì)以 None 來補(bǔ)全這組參數(shù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容