1. map()函數
- Python2中,map(func, seq1[,seq2[...[,seqn)將func作用於seq*的每個序列的索引相同的元素,並最終生成一個[func(seq1[0], seq2[0],....seqn[0]), func(seq1[1], seq2[1],...seqn[1])...]的列表。但在Python3中,map()函數生成一個map類型的對象。
Python2中map直接返回作用后的元素的列表
1 >>> a = [1,3,5,7,9] 2 >>> b = [2,4,6,8,0] 3 >>> map(lambda x, y: x+y, a, b) 4 [3, 7, 11, 15, 9] 5 >>>
Python3中map返回的則是一個map對象
1 >>> a = [1, 3, 5, 7, 9] 2 >>> b = [2, 4, 6, 8, 0] 3 >>> map(lambda x,y: x + y, a, b) 4 <map object at 0x7f53640e3588> 5 >>>
如果想得到列表對象,則還需要調用list轉化為列表對象
1 >>> list(map(lambda x,y: x + y, a, b)) 2 [3, 7, 11, 15, 9] 3 >>>
- Python2中,map()函數的func可以為None,如map(seq1,seq2[,...[,seqn),其作用類似於將seq*中的對應索引的值取出作為一個元組,最終返回一個包含多個元組的列表。而Python3中,map()函數如果不指定func,則最終對返回的map對象轉換時就會拋"TypeError"
1 >>> a = [1, 3, 5, 7, 9] 2 >>> b = [2, 4, 6, 8, 0] 3 >>> list(map(a,b)) 4 Traceback (most recent call last): 5 File "<stdin>", line 1, in <module> 6 TypeError: 'list' object is not callable 7 >>>
因此,如果map()函數的func參數不指定的話,需要使用zip(seq1, seq2[,...[,seqn)函數代替