Python: map() 函數

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']

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章