前言
python 中有個內建函數為「map」,
他能夠快速的幫助我們將「list 的全部內容」完成「對應的 function」
老實說,其實不會「map」完全還能夠寫 python 的程式XD
新手可以先不用急著學 map 的用法也沒關係,還是有其他方法能取代 map 的功能 (內文也會示範)
比較 & 範例程式碼
因為 map 功能相對單純,我們先直接來看例子,
讀者可以自己觀察判斷看看能不能理解!
可先觀察結果,下面再來慢慢說明
def test(x):
return x*2
mylist = [1, 2, 3, 4, 5]
ans_list = []
for ele in mylist:
ans_list.append(test(ele))
print("test with for and basic list method = ", ans_list)
print("test with for in list = ", [test(ele) for ele in mylist])
print("test with map = ", list(map(test, mylist)))
實驗結果
程式碼詳細說明
最新手的時候,「for 搭配 list 一個一個放」的寫法
這個方法非常陽春,最剛開始學的時候大家應該都這樣寫過XD
直接宣告一個空的 list,慢慢的把執行完的結果也放進去XD
def test(x):
return x*2
ans_list = []
for ele in mylist:
ans.list.append(test(ele))
print(ans_list)
稍微學會一點的時候,「直接使用 for in list」的寫法
這個寫法就看起來高級一點了,直接一行的 for 放在 list 裡面,
def test(x):
return x*2
print("test with for in list = ", [test(ele) for ele in mylist])
學會 map 的時候,「map and list」的寫法
這就是傳說中的邏輯加密技術,其實不會這個完全沒有問題XDD
就只是會這個可以讓程式碼看起來會再更簡潔一點 (相對也更難懂XD)
你可能會問,那 map 存在的必要性還有什麼?
基本上會牽扯到「執行的效率問題」,但因為這不是本文的重點,有興趣的讀者可針對此關鍵字另外找有關「map 執行效率」的文章
def test(x):
return x*2
print("test with map = ", list(map(test, mylist)))
map 詳細說明
看 map 函數時,請先抓出逗點,
抓住一個概念「map(function, list)」,
所以看上面的例子,map(test, mylist)
- test: 就是我們的 function 名稱
- mylist: 就是我們的 list (其實只要是 iterable object 都可以!)
注意一個重點! python3 之後 map 回傳的是 「map object」,請用 list 再轉成你看得懂的型態
python3 之後 map 回傳的是 「map object」,
如果直接 print,我們大概會看到如以下所示的內容:
<map object at 記憶體位置>
所以這時候我們需要多使用一個「list」 進行轉換!才能變成我們看得懂的內容!
list(map(function, list))
map 結合 lambda 使用
這更是傳說中的邏輯加密技術,簡單來講就只是讓你的程式碼看起來更炫而已XDD(誤
其實不用學這個還是能寫 python 的! 會了這個就能將程式碼寫得更簡略。
- python lambda 教學可以看我的另外一篇文章:
【Python 基礎語法 #3】python 一行 if else 語法 (one line if else) sample code (內含範例程式碼)