Python map()函數介紹及用法


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()函數是如何工作的。 
work 
從上圖可以看出,函數func函數會作用於seq中的每個元素,得到func(seq[n])組成的列表。下面舉得例子來幫助我們更好的理解這個工作過程。

#使用lambda
>>> print map(lambda x: x % 2, range(7))
[0, 1, 0, 1, 0, 1, 0]

3

#使用列表解析
>>> print [x % 2 for x in range(7)]
[0, 1, 0, 1, 0, 1, 0]

4 
一個seq時,可以使用filter()函數代替,那什么情況不能代替呢?

2、當seq多於一個時,map可以並行(注意是並行)地對每個seq執行如下圖所示的過程: 
2 
從圖可以看出,每個seq的同一位置的元素同時傳入一個多元的func函數之后,得到一個返回值,並將這個返回值存放在一個列表中。下面我們看一個有多個seq的例子:

>>> print map(lambda x , y : x ** y, [2,4,6],[3,2,1])
[8, 16, 6]

 

5 
如果上面我們不使用map函數,就只能使用for循環,依次對每個位置的元素調用該函數去執行。還可以使返回值是一個元組。如:

>>> print map(lambda x , y : (x ** y, x + y), [2,4,6],[3,2,1])
[(8, 5), (16, 6), (6, 7)]

7 
當func函數時None時,這就同zip()函數了,並且zip()開始取代這個了,目的是將多個列表相同位置的元素歸並到一個元組。如:

>>> print map(None, [2,4,6],[3,2,1])
[(2, 3), (4, 2), (6, 1)]

需要注意的是: 
map無法處理seq長度不一致、對應位置操作數類型不一致的情況,這兩種情況都會報類型錯誤。如下圖: 
8

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,2:3,3:4})
[1, 2, 3]
***字符串轉換成元組,並將結果以列表的形式返回***
>>> map(tuple, 'agdf')
[('a',), ('g',), ('d',), ('f',)]
#將小寫轉成大寫
def u_to_l (s):
  return s.upper()
print map(u_to_l,'asdfd')

 

轉自:http://blog.csdn.net/seetheworld518/article/details/46959871

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM