python函式式程式設計之map()
python中map()、filter()、reduce()這三個都是應用於序列的內建函式。
格式:
1 map(func, seq1[, seq2,…])第乙個引數接受乙個函式名,後面的引數接受乙個或多個可迭代的序列,返回的是乙個集合。
python函式程式設計中的map()函式是將func作用於seq中的每乙個元素,並將所有的呼叫的結果作為乙個list返回。如果func為none,作用同zip()。
1、當seq只有乙個時,將函式func作用於這個seq的每個元素上,並得到乙個新的seq。
讓我們來看一下只有乙個seq的時候,map()函式是如何工作的。
從上圖可以看出,函式func函式會作用於seq中的每個元素,得到func(seq[n])組成的列表。下面舉得例子來幫助我們更好的理解這個工作過程。
#乙個seq時,可以使用filter()函式代替,那什麼情況不能代替呢?使用lambda
使用列表解析
>>> print [x % 2 for x in range(7)]
[0, 1, 0, 1, 0, 1, 0]
2、當seq多於乙個時,map可以並行(注意是並行)地對每個seq執行如下圖所示的過程:
從圖可以看出,每個seq的同一位置的元素同時傳入乙個多元的func函式之後,得到乙個返回值,並將這個返回值存放在乙個列表中。下面我們看乙個有多個seq的例子:
>>> print map(lambda x , y : x ** y, [2,4,6],[3,2,1])如果上面我們不使用map函式,就只能使用for迴圈,依次對每個位置的元素呼叫該函式去執行。還可以使返回值是乙個元組。如:[8, 16, 6]
>>> print map(lambda x , y : (x ** y, x + y), [2,4,6],[3,2,1])當func函式時none時,這就同zip()函式了,並且zip()開始取代這個了,目的是將多個列表相同位置的元素歸併到乙個元組。如:[(8, 5), (16, 6), (6, 7)]
>>> print map(none, [2,4,6],[3,2,1])需要注意的是:[(2, 3), (4, 2), (6, 1)]
map無法處理seq長度不一致、對應位置運算元型別不一致的情況,這兩種情況都會報型別錯誤。如下圖:
3、使用map()函式可以實現將其他型別的數轉換成list,但是這種轉換也是有型別限制的,具體什麼型別限制,在以後的學習中慢慢摸索吧。這裡給出幾個能轉換的例子:
***將元組轉換成list*****:>>> map(int, (1,2,3))
[1, 2, 3]
***將字串轉換成list***
>>> map(int, '
1234')
[1, 2, 3, 4]
***提取字典的key,並將結果存放在乙個list中***
>>> map(int, )
[1, 2, 3]
***字串轉換成元組,並將結果以列表的形式返回***
>>> map(tuple, '
agdf')
[('a',), ('
g',), ('
d',), ('f'
,)]#
將小寫轉成大寫
defu_to_l (s):
return
s.upper()
print map(u_to_l,'
asdfd
')
Python map及filter函式使用方法解析
知道python有這幾個內建方法,但一直以來用的都不多,最近重新看了一下,重新記錄一下。map 會根據提供的函式對指定序列進行對映,python3會返回乙個迭代器,具體用法如下 def double x return 2 x if name main print map double,1,2,3,4...
python map函式用法
1,第乙個引數接收乙個函式名,第二個引數接收乙個可迭代物件 list1 1,2,3 result map str,list1 print result 列印結果 1 2 3 2,如果第乙個引數傳入none,第二和第三個引數傳入兩個可迭代物件,那map 的功能同zip list1 1,2,3 list...
python map 函式用法
map 函式 map 是 python 內建的高階函式,它接收乙個函式 f 和乙個 list,並通過把函式 f 依次作用在 list 的每個元素上,得到乙個新的 list 並返回。例如,對於list 1,2,3,4,5,6,7,8,9 如果希望把list的每個元素都作平方,就可以用map 函式 因此...