iT邦幫忙

2025 iThome 鐵人賽

DAY 20
0
Software Development

從零開始學 Python系列 第 20

Day 20 – 列表生成式(List Comprehension)

  • 分享至 

  • xImage
  •  

今天的學習重點

  • 什麼是列表生成式(List Comprehension)
  • 基本語法:把迴圈壓縮成一行
  • 加上條件判斷的進階寫法
  • 巢狀列表生成式

一、什麼是列表生成式?

在前幾天我們使用 for 迴圈來建立列表,例如:

squares = []
for i in range(1, 6):
    squares.append(i ** 2)  #i 的平方,串列(list)的方法
print(squares)

輸出:

[1, 4, 9, 16, 25]

這種常見的「建構新列表」邏輯,可以用 列表生成式(List Comprehension)簡化為一行:

squares = [i ** 2 for i in range(1, 6)]
print(squares)

螢幕擷取畫面 2025-08-22 132118

二、基本語法

[ 表達式 for 變數 in 可迭代物件 ]

example:

nums = [1, 2, 3, 4, 5]
double = [n * 2 for n in nums]
print(double)

輸出:

[2, 4, 6, 8, 10]

螢幕擷取畫面 2025-08-22 132338

三、加上條件判斷

可以在後面加 if 過濾元素:

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
even = [n for n in nums if n % 2 == 0]
print(even)

輸出:

[2, 4, 6, 8]

也能用條件運算式(三元運算子)直接寫在表達式裡:

labels = ["even" if n % 2 == 0 else "odd" for n in nums]
print(labels)

輸出:

['odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd']

螢幕擷取畫面 2025-08-22 132738

四、巢狀列表生成式

可以處理二維資料,例如九九乘法表:

table = [f"{i}x{j}={i*j}" for i in range(1, 4) for j in range(1, 4)]
print(table)

輸出:

['1x1=1', '1x2=2', '1x3=3',
 '2x1=2', '2x2=4', '2x3=6',
 '3x1=3', '3x2=6', '3x3=9']

注意!!
range 的右邊界永遠「取不到」,所以要到 N,必須寫 range(1, N+1)

五、學習心得

今天學會了列表生成式(List Comprehension),可以用「一行程式」完成傳統 for 迴圈才能做到的事情。這種語法就像速記法,讓程式更簡潔。但如果邏輯太複雜,硬是壓縮在一行會讓程式可讀性變差。所以我覺得它適合用在「簡單轉換」或「篩選」的場合。
明天要學習 Python 的內建函式 map()、filter()、reduce() 以及匿名函式 lambda。這些工具能讓我們以「函數式編程」的風格來處理資料,用更優雅的方式做轉換、篩選與歸納。


上一篇
Day 19 – 自訂模組與簡單封裝
下一篇
Day 21 – 內建函式 map / filter / reduce 與匿名函式 lambda
系列文
從零開始學 Python30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言