Python 中的列表理解 – 示例
已發表: 2022-02-18在 Python 中,列表推導式可幫助您從現有的可迭代對象(如列表、字符串和元組)創建新列表。
它們簡潔的語法讓您只需一行代碼即可創建新列表。 本教程將教您如何做到這一點。
在接下來的幾分鐘內,您將了解到:
- 如何使用
for
循環創建新列表, - 在 Python 中使用列表推導的語法,以及
- 如何使用
if
條件語句修改列表推導。
此外,您還將編寫幾個示例來幫助您更好地理解列表推導。
讓我們潛入水中。
如何使用 for 循環創建 Python 列表
假設您有一個數字列表nums
。 並且您想創建另一個列表,其中包含nums
中所有數字的立方體。 以下是在 Python 中使用for
循環的方法:
nums = [2,3,5,7] num_cubes = [] for num in nums: num_cubes.append(num**3) print(num_cubes) # Output [8, 27, 125, 343]
在上面的代碼中,我們有以下步驟:
- 初始化一個空列表
num_cubes
。 - 循環遍歷
nums
列表。 - 訪問每個數字
num
,並使用冪運算符計算其立方體:num**3
。 - 最後,將立方值附加到列表
num_cubes
注意:在 Python 中,求冪運算符
**
與以下語法一起使用:num**pow
— 將數字num
提升為pow
的冪。
但是,您可以使用 Python 中的列表推導更輕鬆地做到這一點。 讓我們繼續學習它的語法。
Python 列表理解語法
列表理解的一般語法如下所示。
<new_list> = [<expression> for <item> in <iterable>]
讓我們解析一下上面的語法。
- 在 Python 中,列表由一對方括號
[]
分隔——因此您需要將列表理解語句括在[]
中。 - <
<iterable>
中的<item>
表示您正在循環遍歷一個可迭代對象。 任何可以循環訪問和訪問單個項目的 Python 對象(例如列表、元組和字符串)都是可迭代的。 -
<expression>
是您要為<iterable>
中的每個<item>
計算的輸出。
這聽起來很簡單,是嗎?
本質上,您想為列表中的所有項目(或任何可迭代項目)做一些事情以獲得一個新的列表。
使用它,我們可以簡化語法,如下圖所示。

現在您已經學習了語法,是時候開始編碼了。 您可以使用 Geekflare 的在線 Python IDE 來學習這些示例。 或者您可以在本地計算機上運行它們。
Python 列表理解示例
在上一節中,您從nums
創建了一個新列表num_cubes
。 讓我們從使用列表推導重寫它開始。
對數字使用列表理解
現在讓我們使用如下簡化的語法:
-
<do-this>
:在這裡,您必須對每個num
進行立方。 所以用num**3
替換<do-this>
。 -
<all-items>
:循環變量是num
— 列表中的各個數字。 -
<this-list>
:我們現有的列表是nums
。 - 而
[num**3 for num in nums]
是最終表達式。
綜上所述,我們有以下代碼片段:
num_cubes = [num**3 for num in nums] print(num_cubes) # Output [8, 27, 125, 343]
恭喜,你已經編寫了你的第一個列表理解。
繼續,讓我們使用 Python 字符串。
對字符串使用列表理解
假設你有authors
列表——你可以用你最喜歡的作者重寫下面的列表。
authors = ["jane austen","george orwell","james clear","cal newport"]
請注意上面列表中作者的姓名是如何小寫的。 我們現在想在標題大小寫中格式化它們並將它們存儲在一個名為author_list
的新列表中。
注意:在 Python 中,字符串方法title()接受一個字符串作為參數,並返回以標題大小寫格式格式化的字符串的副本。 即每個單詞的首字母大寫:
First-name Last-name
所以這就是你需要做的所有事情:
- 遍歷
authors
列表和列表中的每個author
, - 調用
author.title()
以獲取字符串的標題大小寫副本。
Python 代碼如下所示:
authors = ["jane austen","george orwell","james clear","cal newport"] author_list = [author.title() for author in authors] print(author_list) # Output ['Jane Austen', 'George Orwell', 'James Clear', 'Cal Newport']
在上面的輸出中,觀察所有作者的姓名在標題大小寫中的格式——這正是我們想要的。
對多個列表使用列表理解
到目前為止,您已經學習瞭如何使用列表推導從一個現有列表創建新列表。 現在讓我們學習如何從多個列表中創建一個新列表。
例如,考慮這個問題:您有兩個列表l_arr
和b_arr
,其中包含 4 個矩形的長度和寬度。

您需要創建一個包含這 4 個矩形區域的新列表area
。 請記住, area = length * breadth
。
l_arr = [4,5,1,3] b_arr = [2,1,7,9]
您需要兩個列表( l_arr
和b_arr
)中的元素才能計算面積。 你可以使用 Python 的zip()
函數來實現。
注意:在 Python 中,
zip()
函數接受一個或多個迭代作為參數,語法為zip(*iterables)
。 然後它返回一個元組迭代器,其中元組i
包含來自每個可迭代對象的元素i
。
下圖詳細描述了這一點。 您在l_arr
和b_arr
中有 4 個值,因此索引的範圍是從 0 到 3。如您所見,元組0
包含l_arr[0]
和b_arr[0]
,元組1
包含l_arr[1]
和b_arr[1]
等。

因此,您可以循環zip(l_arr,b_arr)
如下所示:
area = [l*b for l,b in zip(l_arr,b_arr)] print(area) # Output [8,5,7,27]
在下一節中,您將學習如何在列表推導式中使用條件語句。
使用條件語法的 Python 列表理解
讓我們從前面的列表理解語法開始。
這是語法:
<new_list> = [<expression> for <item> in <iterable> if <condition>]
您不想為所有項目計算<expression>
,而只想對滿足特定<condition>
的那些項目執行此操作 - where, condition := True
。 這導致了一個簡化的語法,如下所示:

有了這個,讓我們繼續代碼示例。
帶有條件示例的 Python 列表理解
#1。 你得到了字符串“I'm learning Python in 2022” 。 您想獲得此字符串中所有數字的列表。 你是怎麼做到的?
在 Python 中,
<char>.isdigit()
作用於字符<char>
,如果它是數字 (0-9),則返回True
; 否則它返回False
。
下面的代碼片段顯示瞭如何收集字符串str1
中所有數字的列表。
str1 = "I'm learning Python3 in 2022" digits = [char for char in str1 if char.isdigit()] print(digits) # Output ['3', '2', '0', '2', '2']
在上面的代碼中:
- 你遍歷字符串
str1
, - 使用
isdigit()
方法訪問每個char
以檢查它是否是數字,並且 - 只有當它是一個數字時,才將
char
添加到新的列表digits
中。
讓我們再舉一個例子。
#2。 你有一份水果清單。 並且您想創建一個列表starts_with_b
,其中包含fruits
列表中以b
開頭的所有水果。 您可以使用startswith()
方法來編寫條件。
如果 <str> 以 'char' 開頭,則 <
<str>.startswith('char')
返回True
; 否則它返回False
。
fruits = ['blueberry','apple','banana','orange','cherry'] starts_with_b = [fruit for fruit in fruits if fruit.startswith('b')] print(starts_with_b) # Output ['blueberry', 'banana']
在上面的輸出中,我們得到了'blueberry'
和'banana'
,它們是fruits
列表中以'b'
開頭的兩種水果,正如我們所料。
這結束了我們關於列表理解的討論。
結論
我希望本教程能幫助你理解 Python 中的列表推導式。
讓我們總結一下:
- 您可以使用[<do this> for <all-items> in <this-list>]使用列表推導式創建一個新列表。
- 此外,您可以將語法[<do this> for <all-items> in <this-list> if <condition-is-True>]與
if
條件語句一起使用。
此外,您還編寫了幾個示例。 作為下一步,您可以嘗試使用列表推導重寫一些現有的 Python 循環以創建列表。 快樂編碼! 直到下一個教程。
您現在可以了解如何將列表轉換為字典或學習如何在 Python 中處理文件。