理解 Python 的串列推導式(List Comprehension)
更新日期: 2024 年 11 月 16 日
Python 的串列推導式(List Comprehension)是一種簡潔而強大的語法工具,用於從現有資料中快速生成新的串列。
它的設計靈感類似於 JavaScript 的 map
和 filter
方法的結合體,不僅能進行資料轉換,還能輕鬆篩選元素。
本文將詳細介紹串列推導式的用途及其靈活應用。
串列推導式的用途與基本語法
串列推導式的基本用途
串列推導式主要用於資料轉換,因此它必須基於一個資料來源,例如範圍(range
)、已存在的串列等。
它的語法如下:
result = [表達式 for 元素 in 資料來源]
- 表達式:定義如何轉換每個元素。
- 資料來源:用於提供資料的可迭代物件(如
range
、串列等)。
範例:生成數字串列
使用串列推導式生成一個包含 1 到 5 的數字串列:
result = [i for i in range(1, 6)]
print(result) # 輸出 [1, 2, 3, 4, 5]
此範例中,i
是來自 range(1, 6)
的每個數字,串列推導式將其逐一收集到新的串列中。
添加條件篩選(使用 if
)
在串列推導式中,可以通過添加 if
條件篩選出符合要求的元素。
例如,只生成 1 到 5 中的奇數:
result = [i for i in range(1, 6) if i % 2 != 0]
print(result) # 輸出 [1, 3, 5]
- 條件篩選:
if i % 2 != 0
過濾掉偶數,只保留奇數。
串列推導式的靈活應用
結合多種操作
串列推導式不僅可以篩選元素,還可以在轉換的同時進行後續的應用。
例如,將符合條件的元素進行平方運算:
result = [i**2 for i in range(1, 6) if i % 2 != 0]
print(result) # 輸出 [1, 9, 25]
這裡,i**2
將篩選出的奇數進一步轉換為平方後收集到新的串列中。
收集操作作為後續應用的基礎
串列推導式的設計還能幫助開發者將某些操作整合成一個步驟,為後續應用提供基礎。
例如:
filtered_data = [i for i in range(1, 6) if i % 2 != 0]
result = [x * 2 for x in filtered_data]
print(result) # 輸出 [2, 6, 10]
此例中,我們將篩選出的奇數存放於 filtered_data
,並在後續應用中進一步轉換。
串列推導式與 JavaScript 的對比
Python 的串列推導式與 JavaScript 中的 map
和 filter
方法有相似之處,但更加緊湊。
以下是一個等價範例:
JavaScript 的 map
與 filter
:
const result = [1, 2, 3, 4, 5].filter(x => x % 2 !== 0).map(x => x * 2);
console.log(result); // 輸出 [2, 6, 10]
Python 的串列推導式:
result = [x * 2 for x in range(1, 6) if x % 2 != 0]
print(result) # 輸出 [2, 6, 10]
可以看出,Python 的語法更加簡潔,將篩選與轉換整合在一個步驟中完成。
結語
Python 的串列推導式是一種功能強大且簡潔的工具,能夠高效地進行資料轉換與篩選。
相比於其他語言的類似功能,串列推導式的語法更加直觀,適合處理簡單到中等複雜度的資料操作。
在實際應用中,通過靈活組合條件與操作,我們可以快速實現清晰、高效的數據處理邏輯。