99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
2021-03-16 閱讀量: 674
Python中 map() 的用法

map函數(shù),就是引入一個函數(shù),然后對序列(字符串、列表、字典等)的每一個對象進行操作

1.場景:


對序列的所有對象分別加1


一般我們會先想到使用循環(huán)for:


>>> aList=[1,2,3,4,5]

>>> def add(aList):

for x in range(len(aList)):

aList[x]+=1

>>> add(aList)

>>> aList

[2, 3, 4, 5, 6]


由于思維的慣性,因此我們第一時間就會想到for,但是,我們現(xiàn)在知道了map這個函數(shù),我們就試試重寫函數(shù)

>>> def add(x):

return x+1

>>> aList=[1,2,3,4,5]

>>> list(map(add,aList))

[2, 3, 4, 5, 6]

我們只需要寫一個特定的加法函數(shù),然后使用內(nèi)建函數(shù)map,然后返回一個map的類型

>>> map(add,aList)

<map object at 0x0247B050>

>>> type(map(add,aList))

<class 'map'>


我們再通過list把map轉(zhuǎn)換成列表,打印出來

兩組代碼的結(jié)果都是一樣的,但是明顯第二組代碼結(jié)構(gòu)簡單清晰,當然,對于初學(xué)者或者不知道m(xù)ap函數(shù)的除外,他們會覺得第一種才是首選


上面的代碼引入了一個add的函數(shù),但是,很有可能這個函數(shù)在這里只使用一遍,其他地方都不使用了,我們在這里就結(jié)合lambda表達式,簡化上面的代碼


>>> aList=[1,2,3,4,5]

>>> add=lambda x:x+1 #把表達式單獨列出來

>>> list(map(add,aList))

[2, 3, 4, 5, 6]

>>> list(map(lambda x:x+1,aList)) <span style="font-family: Arial, Helvetica, sans-serif;">#把表達式單獨嵌套在里面</span>

[2, 3, 4, 5, 6]

結(jié)合了lambda表達式,代碼只剩下一行,但可讀性更差


注意:由于map是使得每個序列對象都進行同樣的操作,很多時候都不符合時間的需求,畢竟大多數(shù)的時間序列的操作都是需要分支條件來支持的,因此,map的操作具備一定的局限性。



2.多序列


map除了上面支持單序列之外,它還支持多序列


>>> list(map(pow,[1,2,3],[1,2,3]))

[1, 4, 27]

>>> list(map(pow,[1,2,3],[1,2,3],[1,2,3]))

[0, 0, 0]


從上面可以看出,map支持的多序列必須是滿足里面函數(shù)的參數(shù)個數(shù)等于序列個數(shù),例如pow需要兩個參數(shù),那么,我們只能提供兩個序列,提供三個的時候返回0

>>> list(map(pow,[1,2,3],[1,2]))

[1, 4]


而且,如果序列里面的對象不相一致,它會自動截取


3.模擬map


下面我們來試一下自己模擬map的實現(xiàn),我們使用for


>>> def add(x): return x+1

>>> def test(func,aList):

res=[]

for item in aList:

res.append( func(item))

return res

>>> aList=[1,2,3,4,5]

>>> test(add,aList)

[2, 3, 4, 5, 6]

上面的代碼通過for來模擬map的函數(shù)實現(xiàn),但是由于map是內(nèi)建函數(shù),使用c語音實現(xiàn)的,所以從性能上來說模擬的map要比內(nèi)建的map慢




81.5170
0
關(guān)注作者
收藏
評論(0)

發(fā)表評論

暫無數(shù)據(jù)
推薦帖子