分類

展開全部 | 收合全部

分類

展開全部 | 收合全部

【Python 進階語法 #3】python map – 使用方法 與 其他寫法比較整理

前言

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 (內含範例程式碼)

以上面例子繼續示範「map 結合 lambda 使用」範例程式碼

mylist = [1, 2, 3, 4, 5] 
test = lambda x: x*2
print("test lambda and map = ", list(map(test, mylist)))

甚至是

mylist = [1, 2, 3, 4, 5] 
print("test lambda in map = ", list(map(lambda x: x*2, mylist)))

輸出都是一樣的結果哦!

有沒有覺得一個簡單的功能看起來更難懂了呢(喂,
使用這個時,請注意「程式可讀性」,如果與別人合作開發,
請不要寫出可能只有你看得懂的程式碼哦XD!

所以才說這個其實也不用學XD,上面還有很多更簡單的方法,還不用多記呢XD!

結論

不過最後強調一下:使用 map 依然是有他的必要性存在的,這牽扯到「python map 執行程式的效率問題

但因為這不是本文的重點,本文只想對用法作個筆記而已

有興趣的讀者可針對此關鍵字另外找有關「python map 執行效率」的文章 (或等我哪天有空想寫XD)

但不太建議新手或對 python 還不熟的同學使用,很容易把自己搞得更亂。
特別是因此而導致「程式可讀性的下降」,那是更不好的結果。

Reference

https://www.runoob.com/python/python-func-map.html

⭐Python 基礎用法 相關文章整理⭐:
1.【Python】python list 清除, 移除內容元素 remove, pop, del, clear相關用法整理 sample code (內含範例程式碼)
2.【Python】寫模組 module、package 總整理 Importing files from different folder
3.【Python】python assert (斷言) 用法 sample code (內含範例程式碼)
4.【Python】python 一行 if else 語法 (one line if else) sample code (內含範例程式碼)
5.【Python】lambda 與 def function 使用方法與比較整理(內含範例程式碼)
6.【Python】python map 使用方法 與 其他寫法比較整理 (內含範例程式碼) sample code
7.【Python】python zip 使用方法 與 其他寫法比較整理 (內含範例程式碼) sample code
⭐Python 字串處理 相關文章整理⭐:
1.【Python】python print 變數的值 & 變數名稱 方法總整理
2.【Python】python string format str.format 總整理
⭐Python 檔案處理 相關文章整理⭐:
1.【Python】python 開關檔範例 與 程式模板 with open / file open sample code
2.【Python】取出檔案名稱 (含副檔名、不含副檔名) os path basename split 取出 檔名 路徑 不要副檔名 sample code
3.【Python】在 python 中利用 os.chmod 更改檔案的權限 chmod 777
4.【Python】利用 shutil 來複製檔案 shutil copy file
5.【Python】python 建立資料夾範例 mkdir os.makedirs() sample code
6.【Python】python 移除資料夾範例 rmdir shutil.rmtree() sample code
7.【Python】確認檔案是否存在 os.path.isfile / 確認資料夾是否存在 os.path.isdir sample code is folder / file exist
⭐Python 系統偵測 相關文章整理⭐:
1.【Python】python pyinotify sample code 偵測指定路徑底下的文件變化 (內有範例程式碼)
2.【Python】python 利用 argparse 使程式執行時可帶參數 (內附範例程式碼) sample code
⭐Python 平行運算 相關文章整理⭐:
1.【Python】threading – 建立多執行緒來執行程式 (內含範例程式碼) sample code
2.【Python】multiprocessing – 01 | 用多核心來執行程式 (內含範例程式碼) sample code
3.【Python】multiprocessing – 02 | pool, map, apply_async – 用多核心來執行程式並取得結果 (內含範例程式碼) sample code
4.【Python】python thread multiprocess 比較總整理
5.【Python】python pooling multiprocess – 用多核心來執行程式 sample code (內含範例程式碼)
⭐Python 測試程式 相關文章整理⭐:
1.【Python】python 測試程式 – 利用 doctest 測試 python testcase 的優雅寫法,適用於 leetcode (doctest in function,搭配 function 的用法)
2.【Leetcode】python – 利用 doctest 測試 leetcode python testcase 的優雅寫法 (doctest in class,搭配 class 的用法)
⭐Python Chatbot 相關文章整理⭐:
1.【Chatbot】(全圖文說明) LINE Developers bot 機器人註冊與設定
2.【Chatbot】(全圖文說明) ngrok 本地伺服器設定方法 – LINE bot local server
3.【Chatbot】Dialogflow API 串接 python 的方法 (內含範例程式碼)
4.【Chatbot】[講義分享] 手把手實作line機器人 (linebot API 運用)
⭐Python Google Colab (Colaboratory) 相關文章整理⭐:
1.【Colab】Python colab 上傳檔案的方法 (內含範例程式碼) upload files
2.【Colab】Python colab 連接 google 雲端硬碟取用資料 (內含範例程式碼) mount google drive
⭐Python 其他筆記 相關文章整理⭐:
1.【Python】anaconda 更新 (upgrade) python 3.8 版本筆記
2.【Sublime】Sublime 將縮排 “tab” 改成 4格空白 的方法 (圖文說明) sublime indent 4 spaces
3.【Sublime】Python 縮排小技巧 (很爛但實用) 快速將 tab 改成「4格空白」的方法
⭐【喜歡我的文章嗎? 歡迎幫我按讚~ 讓基金會請創作者喝一杯咖啡!
如果喜歡我的文章,請幫我在下方【按五下Like】 (Google, Facebook 免註冊),會由 「LikeCoin」 贊助作者鼓勵繼續創作,讀者們「只需幫忙按讚,完全不用出錢」哦!

likecoin-steps
Howard Weng
Howard Weng

我是 Howard Weng,很多人叫我嗡嗡。這個網站放了我的各種筆記。希望這些筆記也能順便幫助到有需要的人們!如果文章有幫助到你的話,歡迎幫我點讚哦!
另外,因為定位是「個人的隨手筆記」,有些文章內容「⚠️可能我理解有誤⚠️」或「?只寫到一半?」,如果有發現這樣的情況,歡迎在該文章的最下面留言提醒我!我會儘快修正或補上!感謝大家的建議與幫忙,讓網站能變得更好?

文章: 889

1 則留言

★留個言吧!內容有誤或想要補充也歡迎與我討論!