Python中很常用的函數(shù)map()用法實例
一、函數(shù)作用
map()函數(shù)是Python中的一個內(nèi)置函數(shù),它的功能是:將指定的函數(shù),依次作用于可迭代對象的每個元素,并返回一個迭代器對象。這個可迭代對象,可以是一個也可以是多個。
二、map()函數(shù)的語法
語法
map(function,iterable,...)
參數(shù)
function-我們指定的函數(shù)(或數(shù)據(jù)類型),可以是python內(nèi)置的,也可以是自定義的。
iterable-可迭代的對象,例如列表,元組,字符串等。
返回值
返回一個可迭代對象,一般搭配list()使用,輸出列表
三、map()函數(shù)實例
案例1
可迭代對象傳遞給map()函數(shù),然后map()函數(shù)將這個可迭代對象傳入自定義函數(shù)。
#自定義一個函數(shù)a,返回x*2的值 def a(x): return x*2 #定義列表 lis1=[1,3,5,7,9] #對列表中的每個數(shù)運(yùn)用函數(shù)a,返回迭代器 lis1_a=map(a,lis1) #輸出迭代器中的值 for num in lis1_a: print(num) #輸出結(jié)果 ''' 2 6 10 14 18 '''
案例分析
函數(shù)a()是我們自定義的一個有參函數(shù),list1是我們定義的一個列表,map()函數(shù)將列表中的每個值,按照函數(shù)a()進(jìn)行運(yùn)算,并返回一個迭代器lis1_a。此時lis1_a的數(shù)據(jù)類型是:<class 'map'>,我們運(yùn)用for循環(huán)遍歷輸出迭代器lis1_a的值。
案例2
可迭代對象傳遞給map()函數(shù),然后map()函數(shù)將這個可迭代對象進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。
#定義一個列表a a = ['1','2','3'] #將列表中的每個字符串,轉(zhuǎn)換成浮點(diǎn)型,并返回迭代器 b = map(float,a) #輸出迭代器中的值 for num in b: print(num) #輸出結(jié)果 ''' 1.0 2.0 3.0 '''
案例分析
float是我們要轉(zhuǎn)換的數(shù)據(jù)類型,列表a是我們定義的一個列表,map()函數(shù)將列表a中的值運(yùn)用float()函數(shù)進(jìn)行轉(zhuǎn)換,并返回一個迭代器b 。此時b的數(shù)據(jù)類型是:<class 'map'>,我們運(yùn)用for循環(huán)遍歷輸出迭代器b的值。
案例3
多個可迭代對象傳遞給map()函數(shù),然后map()函數(shù)將這2個迭代對象傳入自定義函數(shù)a()。注意:這個自定義函數(shù)a()的參數(shù)個數(shù),要與傳入的可迭代對象數(shù)量一致。
# 定義一個函數(shù) # 該函數(shù)采用2參數(shù) def a(x,y): return x * y # 定義列表1 lis1 = [1, 3, 5, 7, 9] # 定義列表2 lis2 = [2, 4, 6, 8, 10] # 將兩個列表中的值,傳入函數(shù)a,并返回可迭代器 lis_a = map(a, lis1, lis2) #輸出迭代器中的值 for num in lis_a: print(num) #輸出結(jié)果 ''' 2 12 30 56 90 '''
案例分析
函數(shù)a()是我們自定義的一個函數(shù),因為后面要對傳入的2個可迭代對象進(jìn)行運(yùn)算。所以,函數(shù)a()必須有2個形參。lis1和lis2是我們定義的2個列表,map()函數(shù)將這2個列表中的中,分別傳入函數(shù)a()進(jìn)行運(yùn)算,返回一個迭代器lis_a。此時的lis_a的數(shù)據(jù)類型是:<class 'map'>,我們運(yùn)用for循環(huán)遍歷輸出迭代器lis_a的值。
四、運(yùn)行結(jié)果出現(xiàn):<map object at 0x000001809CD03400>報錯
在Python3中,運(yùn)用map()函數(shù),如果格式有誤,就會出現(xiàn)上面的報錯結(jié)果。
案例
a = ['1','3','5'] b = map(int,a) print(b) print(type(b)) #輸出結(jié)果 ''' <map object at 0x0000025781BBB610> <class 'map'> '''
案例分析
列表a是我們定義的一個列表,map()函數(shù)將列表a中的值,抓轉(zhuǎn)成int,此時返回的是一個迭代器b,它是一個map對象。如果想得到列表對象,則還需要調(diào)用list()函數(shù),轉(zhuǎn)化為列表對象。
報錯總結(jié):
- Python2中map直接返回作用后的元素的列表
- Python3中map返回的則是一個map對象
- 如果想得到列表對象,則還需要調(diào)用list轉(zhuǎn)化為列表對象
- Python2中,map()函數(shù)的 function 可以為None,如map(iterable1,iterable2[,...[,iterable n),其作用類似于將iterable*中的對應(yīng)索引的值取出作為一個元組,最終返回一個包含多個元組的列表。而Python3中,map()函數(shù)如果不指定 function,則最終對返回的map對象轉(zhuǎn)換時就會拋"map() must have at least two arguments."。
補(bǔ)充:求兩個數(shù)列中對應(yīng)元素的和
有的人可能會說a是一個數(shù)列,b是另一個數(shù)列,求兩個數(shù)列的和那還不簡單,直接a+b不就好了。那我們來做個小實驗,看看python中兩個數(shù)列直接用+加起來會得到什么,代碼如下:
?a = [2, 6, 3] b = [3, 4, 5] a + b
得到結(jié)果:
[2, 6, 3, 3, 4, 5]
可以發(fā)現(xiàn)python中兩個數(shù)列求+,直接將兩個數(shù)列拼接后返回。聰明的你想到用map函數(shù)怎么操作了嗎?具體代碼如下:
?a = [2, 6, 3] b = [3, 4, 5] list(map(lambda a,b:a+b, a, b))
得到結(jié)果:
[5, 10, 8]
人工加一下可以發(fā)現(xiàn)答案是對的。
總結(jié)
到此這篇關(guān)于Python中很常用的函數(shù)map()用法的文章就介紹到這了,更多相關(guān)Python中函數(shù)map()用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用Python實現(xiàn)Windows定時關(guān)機(jī)功能
是最初的幾個爬蟲,讓我認(rèn)識了Python這個新朋友,雖然才剛認(rèn)識了幾天,但感覺有種莫名的默契感。下面通過這篇文章給大家介紹Python實現(xiàn)Windows定時關(guān)機(jī)功能,需要的朋友可以參考下2017-03-03Python機(jī)器學(xué)習(xí)應(yīng)用之基于線性判別模型的分類篇詳解
線性判別分析(Linear?Discriminant?Analysis,?LDA)是一種監(jiān)督學(xué)習(xí)的降維方法,也就是說數(shù)據(jù)集的每個樣本是有類別輸出。和之前介紹的機(jī)器學(xué)習(xí)降維之主成分分析(PCA)方法不同,PCA是不考慮樣本類別輸出的無監(jiān)督學(xué)習(xí)方法2022-01-01Keras預(yù)訓(xùn)練的ImageNet模型實現(xiàn)分類操作
這篇文章主要介紹了Keras預(yù)訓(xùn)練的ImageNet模型實現(xiàn)分類操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07