今日對話:什麼是一行抵三行的寫法?
我的 Prompt(提示詞):
「我之前都是用 for 迴圈搭配 .append() 來建立 List。但聽說 Python 有一種叫『推導式』的寫法,可以把好幾行縮成一行?請用白話文教我 List 和 Dict 的推導式怎麼寫,並比較傳統寫法與推導式的差異。除了字數少,它還有什麼好處嗎?」
AI 導師告訴我,推導式是 Python 的一大特色,它就像是給迴圈施了縮小燈魔法:
公式:[要放進去的東西 for 變數 in 範圍 if 條件]
白話翻譯:給範圍裡的每一個變數,如果符合條件,就把它變成我們要的東西,然後塞進中括號裡。
公式:{Key: Value for 變數 in 範圍 if 條件}
優勢一:超乾淨。省去了先建立空 List 再慢慢 .append() 的繁瑣步驟。
優勢二:效能更好。因為推導式底層是用 C 語言優化過的,執行速度通常比傳統 for 迴圈快!
AI 警告:不要走火入魔!如果你的邏輯太複雜(例如迴圈裡面包迴圈,又包了三層 if),寫成一行會像外星文。「可讀性」永遠大於「簡短」!
看了公式還是有點抽象,我直接在 VS Code 建立 day15.py檔案,把前幾天寫過的偶數運算,用傳統寫法跟推導式寫法對比一次:
python
#任務:找出 1~10 裡面的偶數,並把他們「平方」存起來
#❌ 傳統寫法 (4 行程式碼)
old_list = []
for i in range(1, 11):
if i % 2 == 0:
old_list.append(i ** 2)
print("傳統寫法結果:", old_list)
#⭕ 推導式寫法 (只要 1 行!)
#拆解:[動作(平方) -> 迴圈(1到10) -> 條件(如果是偶數)]
new_list = [i ** 2 for i in range(1, 11) if i % 2 == 0]
print("推導式寫法結果:", new_list)
#------------------------------------------
#加碼測試:Dict 推導式 (把名單轉成字典,記錄名字長度)
names = ["Alice", "Bob", "Charlie"]
#拆解:{Key(名字): Value(名字長度) -> 迴圈(走訪名單)}
name_lengths = {name: len(name) for name in names}
print("\n字典推導式結果:", name_lengths)
#輸出: {'Alice': 5, 'Bob': 3, 'Charlie': 7}
今天我們解鎖了進階語法的第一關「推導式」,不僅讓程式碼變短了,執行速度也更快了。但記得 AI 的提醒,好讀永遠是最重要的!