在前幾天我們使用 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)
[ 表達式 for 變數 in 可迭代物件 ]
example:
nums = [1, 2, 3, 4, 5]
double = [n * 2 for n in nums]
print(double)
輸出:
[2, 4, 6, 8, 10]
可以在後面加 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']
可以處理二維資料,例如九九乘法表:
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。這些工具能讓我們以「函數式編程」的風格來處理資料,用更優雅的方式做轉換、篩選與歸納。