理解 Python 的串列推導式(List Comprehension)

更新日期: 2024 年 11 月 16 日

Python 的串列推導式(List Comprehension)是一種簡潔而強大的語法工具,用於從現有資料中快速生成新的串列。

它的設計靈感類似於 JavaScript 的 mapfilter 方法的結合體,不僅能進行資料轉換,還能輕鬆篩選元素。

本文將詳細介紹串列推導式的用途及其靈活應用。


串列推導式的用途與基本語法

串列推導式的基本用途

串列推導式主要用於資料轉換,因此它必須基於一個資料來源,例如範圍(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 中的 mapfilter 方法有相似之處,但更加緊湊。

以下是一個等價範例:

JavaScript 的 mapfilter

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 的串列推導式是一種功能強大且簡潔的工具,能夠高效地進行資料轉換與篩選。

相比於其他語言的類似功能,串列推導式的語法更加直觀,適合處理簡單到中等複雜度的資料操作。

在實際應用中,通過靈活組合條件與操作,我們可以快速實現清晰、高效的數據處理邏輯。

Similar Posts