Python 自學筆記第 6 集:Lambda 函式與 sorted()排序應用

更新於 發佈於 閱讀時間約 9 分鐘
你可能已經學會寫函式,知道什麼是 def、參數、return…… 但今天我們來學「更短、更快、更靈活」的一種寫法:lambda 函式。 它很適合快速幫你做排序、過濾、計算——尤其搭配 sorted(),效果驚人。

▶️ 1. 開場:lambda 能幹嘛?

先看一個生活應用的例子:

🛍️ 想像你正在整理零食櫃,裡面有各種不同的點心和它們的熱量。 你想把它們從「熱量最低」排到「最高」,但每項目標是由名稱和數字組成的子清單。

這時候,sorted() 就可以搭配 lambda 幫你用「每項的第 2 個數字(熱量)」來排序。

snacks = [["洋芋片", 500], ["蘋果", 100], ["巧克力", 450]]
sorted_snacks = sorted(snacks, key=lambda x: x[1])
print(sorted_snacks)

🔽 輸出:

[['蘋果', 100], ['巧克力', 450], ['洋芋片', 500]]


▶️ 2. 什麼是 lambda?

lambda 是 Python 中的 匿名函式,不用 def 寫函式名字,一行定義、一行用完。

⚠️ 注意:lambda 只能寫單一運算式(expression),不能寫多行語句(statements)。 這表示你無法在 lambda 裡執行多步操作,例如賦值、條件、迴圈等。

👉 所以若你需要做比較複雜或多行邏輯的事情,還是得用 def 來寫傳統函式。

語法結構:

lambda 參數: 運算式

與 def 對照:

raw-image


基本用法:

square = lambda x: x ** 2
print(square(5))

🔽 輸出:

25


▶️ 3. lambda vs def 差異

讓我們用同一個功能來比較 lambda 和 def:這裡的功能是「把兩個數字相加」。

✅ 用 def 定義傳統函式:

def add(x, y):
return x + y

print(add(3, 4))

🔽 輸出:

7

這種寫法適合邏輯較複雜、會重複使用的功能。你可以加入註解、條件判斷、甚至例外處理。

✅ 用 lambda 寫匿名函式:

add_lambda = lambda x, y: x + y
print(add_lambda(3, 4))

🔽 輸出:

7

lambda 適合一次性、簡短的任務,像是搭配 sorted() 做排序依據,或作為 callback 傳給函式。

📌比較:

raw-image



▶️ 4. lambda + sorted() 排序實戰

✅ 先解釋 sorted() 的運作方式:

sorted() 的語法是:

sorted(iterable, key=函式)
  1. sorted() 是 Python 內建的排序函式。
  2. 把 iterable(這裡是 grades,也就是一堆成績列表)逐筆丟給 key 函式處理
  3. 根據 key 函式回傳的值進行排序,如果沒有指定 key,它就直接用元素本身來比較(例如數字大小、字串順序)。
  4. 但回傳的結果仍是原來的元素(它會回傳一個「排序後的新清單」,不會變成 key 的值)

📌sorted()範例1:元素是數字,會自動以數值大小排序。

g = [2, 1, 3]
print(sorted(g))

🔽 輸出:

[1, 2, 3]

📌sorted()範例2:排序二維 list

grades = [[12, 23, 43], [9, 4, 10], [100, 22, 1]]
sortedGrade = sorted(grades)
print(sortedGrade)

🔽 輸出:

[[9, 4, 10], [12, 23, 43], [100, 22, 1]]

✅lambda + sorted()應用:用 lambda 指定排序 key值

📌範例1:指定依最後一科成績(x[-1])排序

grades = [[12, 23, 43], [9, 4, 10], [100, 22, 1]]
sortedGrade = sorted(grades, key=lambda x: x[-1])
print(sortedGrade)

🔽 輸出:

[[100, 22, 1], [9, 4, 10], [12, 23, 43]]

📌範例2:依加權平均分數排序(搭配 key 函式)

w = lambda x: x[0]*0.3 + x[1]*0.4 + x[2]*0.4
grades = [[12, 23, 43], [9, 4, 10], [100, 22, 1]]
sortedGrade = sorted(grades, key=w)
print(sortedGrade)

🔽 輸出(依加權後排序):

[[9, 4, 10], [100, 22, 1], [12, 23, 43]]

🔍 解釋lambda + sorted()的運作方式:

  • w([12, 23, 43]) ➜ 26.8
  • w([9, 4, 10]) ➜ 8.2
  • w([100, 22, 1]) ➜ 42.4
  • sorted(grades, key=函式) 是根據 key 函式回傳的這三個分數值來「決定排序順序」,
  • 但排序結果仍會回傳原始資料本身,而不是 key 的值。

你得到的仍是原本的三筆成績資料,但順序已經根據加權分數調整過了。(文末補充資料)


▶️ 5. lambda 不是唯一選擇

📌用 def 寫排序依據

def get_last(x):
return x[-1]

grades = [[12, 23, 43], [9, 4, 10], [100, 22, 1]]
print(sorted(grades, key=get_last))

🔽 輸出:

[[100, 22, 1], [9, 4, 10], [12, 23, 43]]

📌用 itemgetter 快速取特定欄

from operator import itemgetter
grades = [[12, 23, 43], [9, 4, 10], [100, 22, 1]]
print(sorted(grades, key=itemgetter(1)))

🔽 輸出:

[[9, 4, 10], [100, 22, 1], [12, 23, 43]]

📌用其他內建函式:

【補充說明】

  • key=str.lower 的意思是:排序時先把每個字串轉為小寫再比較,這樣可以忽略大小寫差異。
  • 如果沒加這個 key,'Banana' 會排在 'apple' 前面,因為大寫字母在 ASCII 中排序比較小。
words = ['Banana', 'apple', 'Cherry']
print(sorted(words, key=str.lower))

🔽 輸出:

['apple', 'Banana', 'Cherry']


▶️ 6. 小練習:

請將下列成績資料依第二科分數「由高到低」排序:

grades = [[70, 85, 90], [88, 76, 92], [95, 90, 80]]
sorted_grades = sorted(grades, key=lambda x: x[1], reverse=True)
print(sorted_grades)

🔽 輸出:

[[95, 90, 80], [70, 85, 90], [88, 76, 92]]


▶️ 7. 小結

raw-image


🧭 結語

lambda 適合「短、快、亮」的小功能,但邏輯複雜還是建議用 def 寫清楚。用lambda整理程式碼中的清單與資料,能讓資料更加簡潔。

下一集,我們將從畫面轉向磁碟——來看看 Python 怎麼幫我們「存資料」「讀檔案」。 準備好進入《第 7 集:檔案處理與輸入輸出》了嗎?📂📥

🤔補充資料: 如果我想直接得到「加權後的分數清單」怎麼做?

那就要用 list comprehension 來處理,例如:

scores = [w(g) for g in grades]
print(scores)

🔽 輸出:這邊就是加權後的資料囉

[26.8, 8.2, 42.4]
留言
avatar-img
留言分享你的想法!
avatar-img
Dolly的奇妙育兒之旅
12會員
95內容數
Dolly 是個家有亞斯哥和過動妹的媽媽 為了記得那些奇妙的育兒真實故事 決定把我(Dolly)和大亞(爸爸)、端端(亞斯哥)和波妞(過動妹)那些日子發生的事寫成部落格 一串感恩又心累、感謝又荒謬的心路歷程紀錄
2025/07/09
一段常用的流程,我們希望可以「取個名字」,以後一行就呼叫整段邏輯,這就是函式(function)
2025/07/09
一段常用的流程,我們希望可以「取個名字」,以後一行就呼叫整段邏輯,這就是函式(function)
2025/07/09
📌 本集目標:學會如何建立、查詢、修改與走訪「Key值」結構,處理生活中的資料對應問題(如記帳、點餐、聯絡人查詢) 🔹 為什麼要學字典? 要查某個人的電話號碼 想記錄今天花了多少錢 把一個商品名稱對應到它的價格 這些「名稱 ➜ 對應資料」的關係,在 Python裡用字典最適合!
2025/07/09
📌 本集目標:學會如何建立、查詢、修改與走訪「Key值」結構,處理生活中的資料對應問題(如記帳、點餐、聯絡人查詢) 🔹 為什麼要學字典? 要查某個人的電話號碼 想記錄今天花了多少錢 把一個商品名稱對應到它的價格 這些「名稱 ➜ 對應資料」的關係,在 Python裡用字典最適合!
2025/07/02
對孩子而言,玩不是浪費時間,而是最自然的學習方式。根據兒童發展心理學者皮亞傑及延伸理論,兒童在成長過程中,遊戲行為會隨認知與社會性發展出現明確的層次變化,反映其身體、語言、情緒與邏輯能力的發展。
Thumbnail
2025/07/02
對孩子而言,玩不是浪費時間,而是最自然的學習方式。根據兒童發展心理學者皮亞傑及延伸理論,兒童在成長過程中,遊戲行為會隨認知與社會性發展出現明確的層次變化,反映其身體、語言、情緒與邏輯能力的發展。
Thumbnail
看更多
你可能也想看
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
本文介紹了各種運算符的用法和優先級,包括算術運算符、比較運算符、賦值運算符、邏輯運算符、位元運算符、成員運算符和身份運算符。每種運算符都有詳細的描述和示例程式碼,幫助理解其功能和用法。
Thumbnail
本文介紹了各種運算符的用法和優先級,包括算術運算符、比較運算符、賦值運算符、邏輯運算符、位元運算符、成員運算符和身份運算符。每種運算符都有詳細的描述和示例程式碼,幫助理解其功能和用法。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
題目敘述 題目會給定我們兩個字串。 第一個是指定順序的字串order。 第二個是輸入字串s。 要求我們依據order給定的順序,重新排列s。 如果出現order中沒有出現的字母,任意位置皆可。 合法答案可能不只一組,輸出其中一種即可。 題目的原文敘述 測試範例 Example
Thumbnail
題目敘述 題目會給定我們兩個字串。 第一個是指定順序的字串order。 第二個是輸入字串s。 要求我們依據order給定的順序,重新排列s。 如果出現order中沒有出現的字母,任意位置皆可。 合法答案可能不只一組,輸出其中一種即可。 題目的原文敘述 測試範例 Example
Thumbnail
本文介紹了串列運算式的應用,以及與Lambda匿名函式方法的比較,並提供了程式範例。串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。lambda函式用於創建匿名函式,通常用於簡單的操作。建議在比較複雜的情況下使用一般for迴圈加if來表示。
Thumbnail
本文介紹了串列運算式的應用,以及與Lambda匿名函式方法的比較,並提供了程式範例。串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。lambda函式用於創建匿名函式,通常用於簡單的操作。建議在比較複雜的情況下使用一般for迴圈加if來表示。
Thumbnail
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
Thumbnail
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News