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>計算的輸出。

這聽起來很簡單,是嗎?

本質上,您想為列表中的所有項目(或任何可迭代項目)一些事情以獲得一個新的列表

使用它,我們可以簡化語法,如下圖所示。

列表理解語法
Python 列表理解語法(作者提供的圖片)

現在您已經學習了語法,是時候開始編碼了。 您可以使用 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_arrb_arr ,其中包含 4 個矩形的長度和寬度。

您需要創建一個包含這 4 個矩形區域的新列表area 。 請記住, area = length * breadth

 l_arr = [4,5,1,3] b_arr = [2,1,7,9]

您需要兩個列表( l_arrb_arr )中的元素才能計算面積。 你可以使用 Python 的zip()函數來實現。

注意:在 Python 中, zip()函數接受一個或多個迭代作為參數,語法為zip(*iterables) 。 然後它返回一個元組迭代器,其中元組i包含來自每個可迭代對象的元素i

下圖詳細描述了這一點。 您在l_arrb_arr中有 4 個值,因此索引的範圍是從 0 到 3。如您所見,元組0包含l_arr[0]b_arr[0] ,元組1包含l_arr[1]b_arr[1]等。

python-zip-函數
Python zip() 函數(作者提供的圖片)

因此,您可以循環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 列表理解(作者提供的圖片)

有了這個,讓我們繼續代碼示例。

帶有條件示例的 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 中處理文件。