[Python基礎]串列運算式(List Comprehension)

更新 發佈閱讀 6 分鐘

[Python基礎]Lambda匿名函式

上一篇談論到Lambda匿名函式,跟串列運算式一樣都是可以創立新的列表,我個人是覺得會比mapfilter結合Lambda匿名函式,來得簡單易讀,但還是因人而異,看所在的群組對哪個接受度較高,就用哪個吧。

本文將介紹串列運算式應用,同樣的功能也用Lambda匿名函式的方法呈現,比較其差異性,看大家對哪一個接受度較高。

串列運算式(List Comprehension)

常見的應用是基於一個序列或 iterable(可疊代物件),將每一個元素經過某個運算的結果串接起來成為新的 list。

語法

new_list = [expression for item in iterable if condition]

expression: 評估為新列表的每個元素的運算式。

item: 可迭代對象(例如列表元組字典的鍵或值等)中的每個元素。

iterable: 可迭代對象,提供要遍歷的元素。

condition(可有可無): 一個條件,只有當條件為真時,expression 才會被應用。


程式範例

1. 基本的串列運算式:

for迴圈取出numbers每個元素,代入到x這個變數,在執行x**2這個運算式,將結果回傳收集起來並產新的列表來儲存這些結果。

numbers = [1, 2, 3, 4, 5]
squared = [x**2 for x in numbers]
# 輸出: [1, 4, 9, 16, 25]
  • for x in numbers: 使用 for 迴圈遍歷 numbers 列表中的每個元素,用 x 來表示當前元素。
  • x**2: 對每個 x 的值計算平方。
  • 整個表達式 [x**2 for x in numbers] 表示將每個 x 的平方結果收集起來,形成一個新的列表。
串列運算式流程

串列運算式流程

這個串列運算式可以用一般的 for 迴圈表示如下:

numbers = [1, 2, 3, 4, 5]
squared = []

for x in numbers:
squared.append(x**2)

# 輸出: [1, 4, 9, 16, 25]
print(squared)

lambda 函式 + Map函式來表示如下:

numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared) # 輸出: [1, 4, 9, 16, 25]

2. 使用條件過濾元素:

串列運算式表示如下:

for迴圈取出numbers每個元素,代入到x這個變數,判斷x餘除為0,在執行x**2這個運算式,將結果回傳收集起來並產新的列表來儲存[4, 16]這個結果。

numbers = [1, 2, 3, 4, 5]
even_squares = [x**2 for x in numbers if x % 2 == 0]
# 輸出: [4, 16]
  • for x in numbers: 使用 for 迴圈遍歷 numbers 列表中的每個元素,用 x 來表示當前元素。
  • if x % 2 == 0: 使用 if 條件篩選,只有當 x 是偶數時,才進行後續的操作。
  • x**2: 對每個滿足條件的 x 的值計算平方。
  • 整個表達式 [x**2 for x in numbers if x % 2 == 0] 表示將每個滿足條件的 x 的平方結果收集起來,形成一個新的列表。

一般的 for 迴圈表示如下:

numbers = [1, 2, 3, 4, 5]
even_squares = []
for x in numbers:
if x % 2 == 0:
even_squares.append(x**2)

print(even_squares)
# 輸出: [4, 16]

lambda 函式 +mapfilter函式來表示如下:

numbers = [1, 2, 3, 4, 5]

# 定義匿名函式
square = lambda x: x**2

# 使用 map 函數應用匿名函式
even_squares = list(map(square, filter(lambda x: x % 2 == 0, numbers)))

# 輸出: [4, 16]
print(even_squares)

相較起來串列運算式是不是簡潔許多


串列運算式也支援多層迴圈,但多層迴圈在加條件式會讓別人不易理解,故建議不要使用,用以下範例來說明此現象。

x 和 y 的乘積,並僅包含乘積為偶數的元素

串列運算式表示:

# 生成二維列表,其中包含所有 x 和 y 的乘積,並僅包含乘積為偶數的元素
result = [(x, y, x * y) for x in range(1, 4) for y in range(1, 4) if x * y % 2 == 0]

# 輸出: [(1, 2, 2), (1, 4, 4), (2, 2, 4), (2, 4, 8), (3, 2, 6), (3, 4, 12)]
print(result)

一般的 for 迴圈表示如下:

result = []

for x in range(1, 4):
for y in range(1, 4):
if x * y % 2 == 0:
result.append((x, y, x * y))

print(result)
# 輸出: [(1, 2, 2), (1, 4, 4), (2, 2, 4), (2, 4, 8), (3, 2, 6), (3, 4, 12)]

這樣看起來在比較複雜的情況下不建議用串列運算式來表示了,用一般的for迴圈加if比較好閱讀程式碼超過兩層以上的運算式,就建議用一般for迴圈來表示吧。


總結

  1. 串列運算式:
    • 串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。
    • 可以包含多層迴圈和條件語句,以生成複雜的列表。
    • 生成複雜的列表就交給一般for迴圈來表示吧。
  2. lambda 函式:
    • lambda 函式用於創建匿名函式,通常用於簡單的操作。
    • 常與函數式編程中的函數(例如 map、filter)一起使用。


謝謝大家觀看~ 希望大家會喜歡,喜歡的話可以給愛心~追蹤一下,不會漏掉之後的文章喔~




留言
avatar-img
螃蟹_crab的沙龍
159會員
310內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。 興趣是攝影,踏青,探索未知領域。 人生就是不斷的挑戰及自我認清,希望老了躺在床上不會後悔自己什麼都沒做。
螃蟹_crab的沙龍的其他內容
2025/04/25
在 Python 中,字典(dict)是非常常用的資料結構,用來儲存 key-value 配對。而在操作字典時,.setdefault() 是一個常被忽略但非常實用的方法。 這篇文章會完整介紹 .setdefault() 的語法、用途、與實務範例,幫助你更有效率地處理字典資料。 什麼是 .se
Thumbnail
2025/04/25
在 Python 中,字典(dict)是非常常用的資料結構,用來儲存 key-value 配對。而在操作字典時,.setdefault() 是一個常被忽略但非常實用的方法。 這篇文章會完整介紹 .setdefault() 的語法、用途、與實務範例,幫助你更有效率地處理字典資料。 什麼是 .se
Thumbnail
2025/01/30
Python 程式在電腦上的執行流程 當我們在電腦上執行 Python 程式時,主要經歷以下幾個步驟: 1. 編寫 Python 程式碼 開發者使用文字編輯器或 IDE(如 VS Code、PyCharm)撰寫 Python 程式,並將其存為 .py 檔案。 例如,一個簡單的 Python
Thumbnail
2025/01/30
Python 程式在電腦上的執行流程 當我們在電腦上執行 Python 程式時,主要經歷以下幾個步驟: 1. 編寫 Python 程式碼 開發者使用文字編輯器或 IDE(如 VS Code、PyCharm)撰寫 Python 程式,並將其存為 .py 檔案。 例如,一個簡單的 Python
Thumbnail
2024/10/17
在一個典型的程式專案中,UI、Controller 和 Main 的分工通常遵循 MVC 模型(Model-View-Controller) 的架構,這是一種常見的設計模式,能夠將應用程式的邏輯和界面進行分離。 大部分典型的程式專案設計: UI (View):專注於用戶界面,展示數據,並將用
Thumbnail
2024/10/17
在一個典型的程式專案中,UI、Controller 和 Main 的分工通常遵循 MVC 模型(Model-View-Controller) 的架構,這是一種常見的設計模式,能夠將應用程式的邏輯和界面進行分離。 大部分典型的程式專案設計: UI (View):專注於用戶界面,展示數據,並將用
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
可選串聯(?.)運算符用於訪問 object 的屬性或調用函數。如果使用該運算符訪問的object 或調用的函式為 undefined 或 null,則表達式會回傳 undefined,而不是拋出錯誤。
Thumbnail
可選串聯(?.)運算符用於訪問 object 的屬性或調用函數。如果使用該運算符訪問的object 或調用的函式為 undefined 或 null,則表達式會回傳 undefined,而不是拋出錯誤。
Thumbnail
f字符串(f-string)在Python 3.6版本引入了新特性,可以更方便地格式化字符串。本文介紹了f-string的基本使用方法,以及表達式、運算符、格式化控制、字典和列表的應用,以及調用方法和函數等。f-string提供了一種更靈活的方式,使你能夠控制字符串的外觀,以滿足不同情況下的需求。
Thumbnail
f字符串(f-string)在Python 3.6版本引入了新特性,可以更方便地格式化字符串。本文介紹了f-string的基本使用方法,以及表達式、運算符、格式化控制、字典和列表的應用,以及調用方法和函數等。f-string提供了一種更靈活的方式,使你能夠控制字符串的外觀,以滿足不同情況下的需求。
Thumbnail
本文介紹了Python中函式引數的*args和**kwargs用法,通過*args處理可變數量的位置引數,通過**kwargs處理可變數量的關鍵字引數。不僅介紹了相應的語法和程式範例,還解釋了它們的順序問題和建議的慣例用法。
Thumbnail
本文介紹了Python中函式引數的*args和**kwargs用法,通過*args處理可變數量的位置引數,通過**kwargs處理可變數量的關鍵字引數。不僅介紹了相應的語法和程式範例,還解釋了它們的順序問題和建議的慣例用法。
Thumbnail
本文介紹了串列運算式的應用,以及與Lambda匿名函式方法的比較,並提供了程式範例。串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。lambda函式用於創建匿名函式,通常用於簡單的操作。建議在比較複雜的情況下使用一般for迴圈加if來表示。
Thumbnail
本文介紹了串列運算式的應用,以及與Lambda匿名函式方法的比較,並提供了程式範例。串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。lambda函式用於創建匿名函式,通常用於簡單的操作。建議在比較複雜的情況下使用一般for迴圈加if來表示。
Thumbnail
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
Thumbnail
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
Thumbnail
本文將介紹自定函式及應用,利用程式範例解釋為什麼要用到自定函式 自定函式好處當然就是,讓你的程式碼看起來比較簡潔,在重複使用到的程式碼區塊,可以包裝成函式,讓你重複使用它。
Thumbnail
本文將介紹自定函式及應用,利用程式範例解釋為什麼要用到自定函式 自定函式好處當然就是,讓你的程式碼看起來比較簡潔,在重複使用到的程式碼區塊,可以包裝成函式,讓你重複使用它。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News