Python高階函數(shù)map()?簡(jiǎn)介和使用詳解
簡(jiǎn)介:
格式:
map(function,iterable,……)
參數(shù)說(shuō)明:
function:是表示函數(shù)功能
iterable:是表示可迭代對(duì)象 ,后面可以跟一個(gè)或者多個(gè)可迭代對(duì)象
功能:這個(gè)函數(shù)可以實(shí)現(xiàn)把可迭代對(duì)象中的每個(gè)數(shù)據(jù)依次帶入功能函數(shù)(function)中
返回值:注意map() 函數(shù)并不會(huì)改變?cè)瓉?lái)的數(shù)據(jù),而是生成一個(gè)新的map對(duì)象(本質(zhì)是一個(gè)迭代器),map對(duì)象第一個(gè)參數(shù)是作用功能,第二個(gè)是被功能函數(shù)作用可迭代對(duì)象,當(dāng)我們?nèi)ネㄟ^(guò)列表(list)進(jìn)行強(qiáng)制轉(zhuǎn)換會(huì)觸發(fā)函數(shù)的作用。
其他信息:這個(gè)函數(shù)在Python2的返回值是直接返回list類型,而在Python3是返回一個(gè)map類型,但是map類型要去通過(guò)list() 轉(zhuǎn)換才可以輸出結(jié)果
map() 函數(shù)是Python中的內(nèi)置函數(shù),這個(gè)函數(shù)又叫做映射函數(shù),其實(shí)里面具有一個(gè)迭代器的功能,會(huì)依次遍歷可迭代對(duì)象進(jìn)行相關(guān)的操作。
help(map) 查看這個(gè)函數(shù)的相關(guān)信息
示例:
示例(1):輸出map()函數(shù)返回值(迭代器)結(jié)果
def fun(n): return n**2 if __name__=='__main__': #判斷是不是執(zhí)行文件 li=[x for x in range(1,12)] re=map(fun,li) print(type(re)) print(list(re)) print(tuple(re)) #輸出結(jié)果:<class 'map'> # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121] # ()
這里可以看出,re是一個(gè)map類型,當(dāng)我們用list去轉(zhuǎn)換re的類型,可以看到輸出結(jié)果,但是如果我們用tuple去轉(zhuǎn)換類型卻輸出不了結(jié)果,所以map類型只能通過(guò)列表類型去轉(zhuǎn)換輸出結(jié)果。
def fun(n): return n**2 if __name__=='__main__': li=[x for x in range(1,12)] re=map(fun,li) for i in re: print(i,end=' ') #輸出結(jié)果:1 4 9 16 25 36 49 64 81 100 121
這里可以看出,map的返回值是一個(gè)迭代器,我們可以去通過(guò)循環(huán)依次輸出結(jié)果,在輸出的時(shí)候會(huì)觸發(fā)fun() 函數(shù)的作用,fun() 函數(shù)會(huì)依次作用給每一個(gè)迭代對(duì)象,然后輸出
示例(2):與循環(huán)對(duì)比
那這里就有人會(huì)問(wèn)了,為什么不用循環(huán)去實(shí)現(xiàn)這種功能呢?循環(huán)不也可以嗎?當(dāng)然可以,只是效率沒(méi)有map() 函數(shù)高,而且沒(méi)有用map() 這么秀~
def fun(n): return n**2 if __name__=='__main__': li=[x for x in range(1,12)] re=[] for i in li: num=fun(i) re.append(num) print(re) #輸出結(jié)果:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
示例(3):字符串轉(zhuǎn)列表
if __name__=='__main__': str1='123456' result=map(int,str1) print(list(result)) #輸出結(jié)果:[1, 2, 3, 4, 5, 6]
示例(4):元組轉(zhuǎn)列表
if __name__=='__main__': tu=(x for x in range(1,11)) result=map(str,tu) print(list(result)) #輸出結(jié)果:['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
示例(5):提取字典的鍵key,通過(guò)函數(shù)作用放入到列表當(dāng)中
def fun(n): return n*2 if __name__=='__main__': d={1:'good',2:'nice',3:'wao',4:'bless'} result=map(fun,d) print(list(result)) #輸出結(jié)果:[2, 4, 6, 8]
示例(6):與lambda函數(shù)結(jié)合
1.
if __name__=='__main__': li=[x for x in range(-7,8) if x%2==0] result=map(lambda y:y**2+y,li) print(list(result)) #輸出結(jié)果:[30, 12, 2, 0, 6, 20, 42]
2.多個(gè)可迭代對(duì)象
if __name__=='__main__': li=[1,3,5,7] lil=[2,4,6,8] result=map(lambda x,y:x+y,li,lil) print(list(result)) #輸出結(jié)果:[3, 7, 11, 15]
if __name__=='__main__': li=[1,3,5,7] lil=[2,4,6] result=map(lambda x,y:x+y,li,lil) print(list(result)) #輸出結(jié)果:[3, 7, 11]
這里說(shuō)明一下:如果是對(duì)兩個(gè)或者兩個(gè)以上可迭代對(duì)象進(jìn)行處理的話,是根據(jù)序列的下標(biāo)一一對(duì)應(yīng)處理,比如上面的例子,是按照1+2,3+4,5+6,7+8依次輸出結(jié)果,但是第二個(gè)例子沒(méi)有8,故無(wú)法對(duì)下標(biāo)為 3 的位置進(jìn)行處理,所以輸出結(jié)果只有三個(gè)。
3.多個(gè)可迭代對(duì)象返回元組形式
if __name__=='__main__': li=[1,2,3,4] lil=[5,6,7,8] result=map(lambda x,y:(y,x),li,lil) print(list(result)) #輸出結(jié)果:[(5, 1), (6, 2), (7, 3), (8, 4)]
4.元組與列表共同作用
if __name__=='__main__': li=[a for a in range(0,4)] tu=(b for b in range(4,8)) result=map(lambda x,y:(x**2,y-5),li,tu) print(list(result)) #輸出結(jié)果:[(0, -1), (1, 0), (4, 1), (9, 2)]
這里可以看出,iterable……可以是列表或者元組,只要有下標(biāo)且對(duì)應(yīng)的都可以進(jìn)行參與運(yùn)算
示例(7):math函數(shù)作為function
import math if __name__=='__main__': li=[a for a in range(-5,4)] result=map(lambda x:round(math.sin(x),2),li) #保留兩位小數(shù) print(list(result)) #輸出結(jié)果:[0.96, 0.76, -0.14, -0.91, -0.84, 0.0, 0.84, 0.91, 0.14]
到此這篇關(guān)于Python高階函數(shù)map() 簡(jiǎn)介和使用詳解的文章就介紹到這了,更多相關(guān)Python 高階函數(shù)map使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python+Django在windows下的開(kāi)發(fā)環(huán)境配置圖解
Python+Django在windows下的開(kāi)發(fā)環(huán)境配置圖解教程,需要的朋友可以參考下。2009-11-11使用python實(shí)現(xiàn)unix2dos和dos2unix命令的例子
今天小編就為大家分享一篇使用python實(shí)現(xiàn)unix2dos和dos2unix命令的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08matplotlib共享坐標(biāo)軸的實(shí)現(xiàn)(X或Y坐標(biāo)軸)
在作圖的過(guò)程中,我們經(jīng)常會(huì)遇到子圖共用坐標(biāo)軸的情況,或是共用橫軸標(biāo)軸,也可能是縱坐標(biāo)軸。本文就介紹了matplotlib共享坐標(biāo)軸,感興趣的可以了解一下2021-05-05python爬蟲(chóng)beautifulsoup解析html方法
這篇文章主要介紹了python爬蟲(chóng)beautifulsoup解析html方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12利用Python中的內(nèi)置open函數(shù)讀取二進(jìn)制文件
這篇文章主要介紹了利用Python實(shí)現(xiàn)讀取二進(jìn)制文件,文章嘗試使用Python中的內(nèi)置open函數(shù)使用默認(rèn)讀取模式讀取zip文件,下文詳細(xì)介紹,需要的小伙伴可以參考一下2022-05-05