1. 程式人生 > >Python內建函式map

Python內建函式map

簡介

map()是 Python 內建的高階函式,它接收一個函式 func 和一個 list,並通過把函式 func依次作用在 list 的每個元素上,得到一個新的 list 並返回。

一、當list只有一個時

當list只有一個時,將函式func作用於這個list的每個元素上,並返回一個map物件。

def func(x):
    return x**2

print(map(func, [1,2,3,4,5]))

for x in map(func, [1,2,3,4,5])):
    print(x)

輸出
< map object at 0x0000029C8FD08940 >
1
4
9
16
25

另一個應用案例:將字串列表中每個字母的首字母變為大寫,其餘

def func(str):
    stmp = str[0:1].upper() + str[1:].lower()
    return stmp

lst = ['aWm', 'AKm', 'kar', 'groza']
print(list(map(func, lst)))

輸出結果:

['Awm', 'Akm', 'Kar', 'Groza']

二、當list有多個時

當存在多個list物件時,map並行地處理傳入的list,呼叫滿足下圖規則:這裡寫圖片描述

def func(x,y,z):
    result1 = x**y**z
    result2 = x*y*z
    return
(result1, result2) print(list(map(func, [1,2,3],[1,1,1],[3,2,1]))) 輸出結果: >>> [(1, 3), (2, 4), (3, 3)]

一些需要注意的細節
在python3中map可以處理長度不同的list(但是列表成員型別必須相同),他會將所有列表截斷為最小長度

for i in map(lambda x,y:(x**y,x+y),[1,2,3,4,5,6],[1,2]):
    print(i)

輸出結果:
>>> (1, 2)
    (4, 4)

一些特殊用法


1、用作型別轉換

for x in map(int, '1234'):
    print(x)

輸出結果:
>>> 1
    2
    3
    4

2、用作zip函式
如果函式是 None,自動假定一個‘identity’函式,這時候就是模仿 zip()

在python2.x中有

print map(None, [1,2,3],[3,2,1]) 

執行結果:
>>> [(1, 3), (2, 2), (3, 1)]

但是在 python3中,返回是一個迭代器,所以它其實是不可呼叫的