map()是 Python 內置的高階函數,它接收兩個參數,一個函數 f 和一個Iterable(可迭代的),map將函數 f 依次作用到序列的每個元素上,並把結果作爲新的 Iterator(迭代器) 返回。
例如,對於list [1, 2, 3, 4, 5, 6, 7, 8, 9],如果希望把list的每個元素都作平方,就可以用map()函數:
因此,我們只需要傳入函數 f(x)=x*x,就可以利用map()函數完成這個計算:
def f(x):
return x * x
r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(list(r))
#輸出結果
[1, 4, 9, 16, 25, 36, 49, 64, 81]
print(r)
# 報錯:<map object at 0x0000019250F21BA8>
# 出錯原因:在python3裏面,map()的返回值是iterators,而不是list, 所以想要使用,需將iterator 轉換成list
注:map()傳入的第一個參數是 f,即函數對象本身。由於結果 r 是一個 Iterator, Iterator 是惰性序列,因此通過 list()函數讓它把整個序列都計算出來並返回一個 list。
實例1. 假設用戶輸入的英文名字不規範,沒有按照首字母大寫,後續字母小寫的規則,請利用map()函數,把一個list(包含若干不規範的英文名字)變成一個包含規範英文名字的list:
輸入:['adam', 'LISA', 'barT']
輸出:['Adam', 'Lisa', 'Bart']
def format_name(s):
return s[0].upper() + s[1:].lower()
r = map(format_name, ['adam', 'LISA', 'barT'])
print(list(r))
#輸出結果
['Adam', 'Lisa', 'Bart']
實例2. 把 list 所有數字轉爲字符串。
r = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list(map(str, r )))
#輸出結果
['1', '2', '3', '4', '5', '6', '7', '8', '9']