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 對照:

vocus|新世代的創作平台


基本用法:

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 傳給函式。

📌比較:

vocus|新世代的創作平台



▶️ 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. 小結

vocus|新世代的創作平台


🧭 結語

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

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

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

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

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

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

[26.8, 8.2, 42.4]
留言
avatar-img
Dolly的奇妙育兒之旅
20會員
132內容數
一串感恩又心累、感謝又荒謬的心路歷程
2025/07/09
一段常用的流程,我們希望可以「取個名字」,以後一行就呼叫整段邏輯,這就是函式(function)
Thumbnail
2025/07/09
一段常用的流程,我們希望可以「取個名字」,以後一行就呼叫整段邏輯,這就是函式(function)
Thumbnail
2025/07/09
📌 本集目標:學會如何建立、查詢、修改與走訪「Key值」結構,處理生活中的資料對應問題(如記帳、點餐、聯絡人查詢) 🔹 為什麼要學字典? 要查某個人的電話號碼 想記錄今天花了多少錢 把一個商品名稱對應到它的價格 這些「名稱 ➜ 對應資料」的關係,在 Python裡用字典最適合!
Thumbnail
2025/07/09
📌 本集目標:學會如何建立、查詢、修改與走訪「Key值」結構,處理生活中的資料對應問題(如記帳、點餐、聯絡人查詢) 🔹 為什麼要學字典? 要查某個人的電話號碼 想記錄今天花了多少錢 把一個商品名稱對應到它的價格 這些「名稱 ➜ 對應資料」的關係,在 Python裡用字典最適合!
Thumbnail
2025/07/02
對孩子而言,玩不是浪費時間,而是最自然的學習方式。根據兒童發展心理學者皮亞傑及延伸理論,兒童在成長過程中,遊戲行為會隨認知與社會性發展出現明確的層次變化,反映其身體、語言、情緒與邏輯能力的發展。
Thumbnail
2025/07/02
對孩子而言,玩不是浪費時間,而是最自然的學習方式。根據兒童發展心理學者皮亞傑及延伸理論,兒童在成長過程中,遊戲行為會隨認知與社會性發展出現明確的層次變化,反映其身體、語言、情緒與邏輯能力的發展。
Thumbnail
看更多
你可能也想看
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
本文介紹了各種運算符的用法和優先級,包括算術運算符、比較運算符、賦值運算符、邏輯運算符、位元運算符、成員運算符和身份運算符。每種運算符都有詳細的描述和示例程式碼,幫助理解其功能和用法。
Thumbnail
本文介紹了各種運算符的用法和優先級,包括算術運算符、比較運算符、賦值運算符、邏輯運算符、位元運算符、成員運算符和身份運算符。每種運算符都有詳細的描述和示例程式碼,幫助理解其功能和用法。
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
本文介紹了串列運算式的應用,以及與Lambda匿名函式方法的比較,並提供了程式範例。串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。lambda函式用於創建匿名函式,通常用於簡單的操作。建議在比較複雜的情況下使用一般for迴圈加if來表示。
Thumbnail
本文介紹了串列運算式的應用,以及與Lambda匿名函式方法的比較,並提供了程式範例。串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。lambda函式用於創建匿名函式,通常用於簡單的操作。建議在比較複雜的情況下使用一般for迴圈加if來表示。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
題目敘述 題目會給定我們兩個字串。 第一個是指定順序的字串order。 第二個是輸入字串s。 要求我們依據order給定的順序,重新排列s。 如果出現order中沒有出現的字母,任意位置皆可。 合法答案可能不只一組,輸出其中一種即可。 題目的原文敘述 測試範例 Example
Thumbnail
題目敘述 題目會給定我們兩個字串。 第一個是指定順序的字串order。 第二個是輸入字串s。 要求我們依據order給定的順序,重新排列s。 如果出現order中沒有出現的字母,任意位置皆可。 合法答案可能不只一組,輸出其中一種即可。 題目的原文敘述 測試範例 Example
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News