詳解Python map函數(shù)及Python map()函數(shù)的用法
python map函數(shù)
map()函數(shù) map()是 Python 內(nèi)置的高階函數(shù),它接收一個(gè)函數(shù) f 和一個(gè) list,并通過把函數(shù) f 依次作用在 list 的每個(gè)元素上,得到一個(gè)新的 list 并返回。 例如,對(duì)于list [1, 2, 3, 4, 5, 6, 7, 8, 9] 如果希望把list的每個(gè)元素都作平方,就可以用map()函數(shù): 因此,我們只需要傳入函數(shù)f(x)=x*x,就可以利用map()函數(shù)完成這個(gè)計(jì)算: def f(x): return x*x print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) 輸出結(jié)果: [1, 4, 9, 10, 25, 36, 49, 64, 81] 注意:map()函數(shù)不改變?cè)械?list,而是返回一個(gè)新的 list。 利用map()函數(shù),可以把一個(gè) list 轉(zhuǎn)換為另一個(gè) list,只需要傳入轉(zhuǎn)換函數(shù)。 由于list包含的元素可以是任何類型,因此,map() 不僅僅可以處理只包含數(shù)值的 list,事實(shí)上它可以處理包含任意類型的 list,只要傳入的函數(shù)f可以處理這種數(shù)據(jù)類型。 任務(wù) 假設(shè)用戶輸入的英文名字不規(guī)范,沒有按照首字母大寫,后續(xù)字母小寫的規(guī)則,請(qǐng)利用map()函數(shù),把一個(gè)list(包含若干不規(guī)范的英文名字)變成一個(gè)包含規(guī)范英文名字的list: 輸入:['adam', 'LISA', 'barT'] 輸出:['Adam', 'Lisa', 'Bart'] def format_name(s): s1=s[0:1].upper()+s[1:].lower(); return s1; print map(format_name, ['adam', 'LISA', 'barT'])
map()函數(shù)是python內(nèi)置的高階函數(shù),對(duì)傳入的list的每一個(gè)元素進(jìn)行映射,返回一個(gè)新的映射之后的list
Python map()函數(shù)的用法
Python函數(shù)式編程之map()
Python中map()、filter()、reduce()這三個(gè)都是應(yīng)用于序列的內(nèi)置函數(shù)。
格式:
map(func, seq1[, seq2,…])
第一個(gè)參數(shù)接受一個(gè)函數(shù)名,后面的參數(shù)接受一個(gè)或多個(gè)可迭代的序列,返回的是一個(gè)集合。
Python函數(shù)編程中的map()函數(shù)是將func作用于seq中的每一個(gè)元素,并將所有的調(diào)用的結(jié)果作為一個(gè)list返回。如果func為None,作用同zip()。
1、當(dāng)seq只有一個(gè)時(shí),將函數(shù)func作用于這個(gè)seq的每個(gè)元素上,并得到一個(gè)新的seq。
讓我們來看一下只有一個(gè)seq的時(shí)候,map()函數(shù)是如何工作的。
從上圖可以看出,函數(shù)func函數(shù)會(huì)作用于seq中的每個(gè)元素,得到func(seq[n])組成的列表。下面舉得例子來幫助我們更好的理解這個(gè)工作過程。
#使用lambda >>> print map(lambda x: x % 2, range(7)) [0, 1, 0, 1, 0, 1, 0]
#使用列表解析 >>> print [x % 2 for x in range(7)] [0, 1, 0, 1, 0, 1, 0]
一個(gè)seq時(shí),可以使用filter()函數(shù)代替,那什么情況不能代替呢?
2、當(dāng)seq多于一個(gè)時(shí),map可以并行(注意是并行)地對(duì)每個(gè)seq執(zhí)行如下圖所示的過程:
從圖可以看出,每個(gè)seq的同一位置的元素同時(shí)傳入一個(gè)多元的func函數(shù)之后,得到一個(gè)返回值,并將這個(gè)返回值存放在一個(gè)列表中。下面我們看一個(gè)有多個(gè)seq的例子:
>>> print map(lambda x , y : x ** y, [2,4,6],[3,2,1]) [8, 16, 6]
如果上面我們不使用map函數(shù),就只能使用for循環(huán),依次對(duì)每個(gè)位置的元素調(diào)用該函數(shù)去執(zhí)行。還可以使返回值是一個(gè)元組。如:
>>> print map(lambda x , y : (x ** y, x + y), [2,4,6],[3,2,1]) [(8, 5), (16, 6), (6, 7)]
當(dāng)func函數(shù)時(shí)None時(shí),這就同zip()函數(shù)了,并且zip()開始取代這個(gè)了,目的是將多個(gè)列表相同位置的元素歸并到一個(gè)元組。如:
>>> print map(None, [2,4,6],[3,2,1]) [(2, 3), (4, 2), (6, 1)]
需要注意的是:
map無法處理seq長度不一致、對(duì)應(yīng)位置操作數(shù)類型不一致的情況,這兩種情況都會(huì)報(bào)類型錯(cuò)誤。如下圖:
3、使用map()函數(shù)可以實(shí)現(xiàn)將其他類型的數(shù)轉(zhuǎn)換成list,但是這種轉(zhuǎn)換也是有類型限制的,具體什么類型限制,在以后的學(xué)習(xí)中慢慢摸索吧。這里給出幾個(gè)能轉(zhuǎn)換的例子:
***將元組轉(zhuǎn)換成list*** >>> map(int, (1,2,3)) [1, 2, 3] ***將字符串轉(zhuǎn)換成list*** >>> map(int, '1234') [1, 2, 3, 4] ***提取字典的key,并將結(jié)果存放在一個(gè)list中*** >>> map(int, {1:2,2:3,3:4}) [1, 2, 3] ***字符串轉(zhuǎn)換成元組,并將結(jié)果以列表的形式返回*** >>> map(tuple, 'agdf') [('a',), ('g',), ('d',), ('f',)] #將小寫轉(zhuǎn)成大寫 def u_to_l (s): return s.upper() print map(u_to_l,'asdfd')
總結(jié)
以上所述是小編給大家介紹的詳解Python map函數(shù)及Python map()函數(shù)的用法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
python列表數(shù)據(jù)增加和刪除的具體實(shí)例
在本篇文章里小編給大家整理的是一篇關(guān)于python列表數(shù)據(jù)增加和刪除的具體實(shí)例內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-05-05Python實(shí)現(xiàn)讀取txt文件并轉(zhuǎn)換為excel的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)讀取txt文件并轉(zhuǎn)換為excel的方法,涉及Python針對(duì)txt文件的讀取及Excel格式文件生成相關(guān)操作技巧,需要的朋友可以參考下2018-05-05Python 爬蟲批量爬取網(wǎng)頁圖片保存到本地的實(shí)現(xiàn)代碼
這篇文章主要介紹了Python 爬蟲批量爬取網(wǎng)頁圖片保存到本地,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12PyCharm搭建Spark開發(fā)環(huán)境實(shí)現(xiàn)第一個(gè)pyspark程序
這篇文章主要介紹了PyCharm搭建Spark開發(fā)環(huán)境實(shí)現(xiàn)第一個(gè)pyspark程序,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06Django中信號(hào)signals的簡(jiǎn)單使用方法
這篇文章主要給大家介紹了關(guān)于Django中信號(hào)signals的簡(jiǎn)單使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07舉例區(qū)分Python中的淺復(fù)制與深復(fù)制
這篇文章主要介紹了舉例區(qū)分Python中的淺復(fù)制與深復(fù)制,是Python入門學(xué)習(xí)中的重要知識(shí),需要的朋友可以參考下2015-07-07Python如何使用pymongo連接MongoDB數(shù)據(jù)庫并進(jìn)行相關(guān)操作
PyMongo是驅(qū)動(dòng)程序,使python程序能夠使用Mongodb數(shù)據(jù)庫,使用python編寫而成,下面這篇文章主要給大家介紹了關(guān)于Python如何使用pymongo連接MongoDB數(shù)據(jù)庫并進(jìn)行相關(guān)操作的相關(guān)資料,需要的朋友可以參考下2023-05-05python 和c++實(shí)現(xiàn)旋轉(zhuǎn)矩陣到歐拉角的變換方式
今天小編就為大家分享一篇python 和c++實(shí)現(xiàn)旋轉(zhuǎn)矩陣到歐拉角的變換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12conda配置python虛擬環(huán)境的實(shí)現(xiàn)步驟
本文主要介紹了conda配置python虛擬環(huán)境的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03