如何使用python列表理解(以及何時不使用它們)

下面是關於使用Python的這一驚人特性的所有需要了解的資訊,它將在一夜之間提高您的生產率和程式碼可讀性。...

您可能聽說過Python的列表理解。也許這甚至是你在沒有真正理解的情況下使用的東西。現在是學習的時候了,因為我們將介紹有關Python中列表理解的所有知識。

python-list-comprehension

在開始之前,有必要讓自己重新瞭解數組和列表在Python中是如何工作的,以及如何使用Python字典。

什麼是python列表理解(python list comprehension)?

列表理解聽起來很複雜,但實際上並不複雜。在Python中,它只是一種根據某些條件快速篩選或細化列表的方法。

它省去了你寫幾行代碼的時間(特別是當你已經在一個循環中的時候),而且它保持了你代碼的可讀性。

但是,要小心,因為列表理解並不總是答案。很容易忘乎所以,寫出難以理解的複雜理解。有時寫更多的代碼更好,尤其是如果它有助於可讀性的話。堅持簡單的任務,把代碼放在一個單一的職責上。

如何在python中使用列表理解

注意:這些示例都使用python3.6。如果您不確定python3和python2之間的區別,那麼請務必閱讀我們的Python常見問題解答,我們將在這裡討論這個問題以及更多內容。

考慮複製數組並將數組中的每個字母轉換為大寫的這段代碼。它通過循環數組中的每個項來實現:

letters = ['a', 'b', 'c', 'd']print(letters)upper_letters = []for letter in letters: result = letter.upper() upper_letters.append(result)print(upper_letters)

Learn Python list comprehension

下面是相同的邏輯,除了使用基本的Python列表理解在一行代碼中完成之外:

letters = ['a', 'b', 'c', 'd']print(letters)upper_letters = [x.upper() for x in letters]print(upper_letters)

Learn Python list comprehension

如您所見,結果是完全相同的,但是這個過程需要大量的代碼而不需要列表理解。

讓我們把這個簡單的例子分解一下。

本例創建了一個名為letters的列表。它存儲小寫字母“a”、“b”、“c”和“d”。假設您希望所有這些列表元素都是大寫的?在沒有列表理解的情況下,您必須創建一個新的列表來存儲結果(稱為大寫字母),循環遍歷字母列表中的每個元素,轉換每個字母(並將其存儲在結果中——可選但良好的做法),然後將大寫字母附加到新列表中。多大的工作量啊!

這裡的列表理解幾乎完全等同於循環選項。它實際上表示“對於字母列表中的每個字母,將它們轉換為大寫,並將結果作為新列表返回。”

列表理解只能用於列表,並且必須返回新列表。我們再深入一點。

一份理解清單包括三個部分(我們將在下面介紹第三部分)。列表理解必須以方括號([和])開始和結束。這就是它的設計方式,讓Python知道您將使用一個列表。

在方括號內,您需要從結果開始。這就是您希望對每個列表元素執行的操作。

在上面的示例中,下面的代碼使用upper()方法將每個元素(由變量名x引用)轉換為大寫,upper()方法是Python核心庫的一部分:

[x.upper() # will not run, only half the comprehension at this point

接下來,您需要告訴Python要處理哪個列表,並將每個元素分配給一個變量。這與冗長示例中的for循環完全相同:

for x in letters

每次循環遍歷列表時,x的值都將更改為當前元素的值。它將以“a”開頭,然後是“b”,依此類推。

如果你把它們放在一起(並把它賦給一個名為upper\u letters的變量),你就完成了:

upper_letters = [x.upper() for x in letters]

現在,大寫字母將包含一個大寫字母列表,從“a”開始,然後是“B”,依此類推。

python中列表理解的第三部分

正如我們上面提到的,還有第三部分要列出理解。

完成上述兩個步驟後,可以包括一個可選條件。這就像使用if語句說“基於這個舊列表,為我創建一個新列表,但只包含符合我的條件的元素”。

下面是它的樣子:

ages = [1, 34, 5, 7, 3, 57, 356]print(ages)old_ages = [x for x in ages if x > 10]print(old_ages)

Learn Python list comprehension

本例使用了一個名為ages的新列表。舊錶是用一個表集合起來的。末尾的if條件意味著只有滿足條件的列表元素才會**到新列表中。在這個例子中,任何年齡大於10歲都是允許的。

何時不使用python列表理解

一旦你掌握了竅門,列表理解是驚人的,但它並不是在任何情況下都有用。當您需要多個條件時,您可能不應該使用它:

old_ages = [x for x in ages if x > 10 and x < 100 and x is not None]

這個代碼可以工作,但它開始變得冗長和混亂。類似地,除了一個簡單的函數調用以外的任何東西都可能不起作用。在本例中,您將得到一個錯誤:

letters = ['a', 'b', 'c', 'd', 2]print(letters)upper_letters = [x.upper() for x in letters]print(upper_letters)

Learn Python list comprehension

這是一個非常有效的代碼,但由於不能將數字大寫,因此無法使用。在這種情況下,較長的循環實際上更可取,因為您可以執行一些異常處理:

letters = ['a', 'b', 'c', 'd', 1]print(letters)upper_letters = []for letter in letters: try: result = letter.upper() upper_letters.append(result) except AttributeError: pass # do nothingprint(upper_letters)

Learn Python list comprehension

開始使用python列表理解

既然您知道Python中的列表理解是多麼容易,就沒有理由不使用它了。只需記住保持簡單,並首先考慮可讀性。

也許你會用Python控制Arduino,或者DIY Python網絡安全攝像頭呢?

  • 發表於 2021-03-24 12:24
  • 閱讀 ( 71 )
  • 分類:程式設計

你可能感興趣的文章

追加(append)和在python中擴充套件(extend in python)的區別

...幾個與列表相關聯的內建函式。程式設計師可以在程式中使用它們。其中兩個是,append和extend。本文討論了append和extend的區別巨蟒append方法主要用於向現有列表中新增一個元素,而extend方法用於向現有列表中新增多個元素。Python...

  • 發佈於 2020-10-19 10:35
  • 閲讀 ( 71 )

perl公司(perl)和python(python)的區別

...設計有助於將程式劃分為函式。面向物件程式設計有助於使用物件對軟體或程式進行建模。 Perl是一種解釋語言。因此,每一行都由直譯器逐個讀取。高階語言程式可以被程式設計師理解,但機器卻不能理解。因此,指令應轉換...

  • 發佈於 2020-10-19 17:38
  • 閲讀 ( 55 )

紅寶石(ruby)和python(python)的區別

...是這些語言支援面向物件程式設計(OOP)。OOP方法有助於使用物件對一個或一組程式進行建模。Ruby和Python的關鍵區別在於Ruby主要用於web開發,而Python主要用於各種應用程式,包括web開發。Python還常用於科學計算、資料科學應用...

  • 發佈於 2020-10-19 17:41
  • 閲讀 ( 71 )

r(r)和python(python)的區別

...式語言和一個用於統計分析的軟體環境,用於表示圖形。使用R的主要優點是它可以用於實現統計概念,如線性和非線性建模、時間序列分析、聚類等。 R是一種解釋語言,因此每一行都由直譯器一行接一行地讀。它是一種高階程...

  • 發佈於 2020-10-20 09:33
  • 閲讀 ( 70 )

如何在python中使用列表理解

... 然而,如果你不知道如何使用它,你可能會生氣。如果您不知道在程式碼中的什麼地方應用它,那就更令人沮喪了。在這裡,我們將透過一些實際例子向您展示如何在Python中使用列表理解。 ...

  • 發佈於 2021-03-11 10:55
  • 閲讀 ( 66 )

python字典:如何使用它編寫更好的程式碼

... 在本文中,我們將向您介紹如何使用python字典。 ...

  • 發佈於 2021-03-14 05:15
  • 閲讀 ( 43 )

陣列和列表在python中的工作方式

...資料型別告訴編譯器(或者在Python的情況下告訴直譯器)如何使用資料。資料結構指定可以執行的操作,並且通常實現特定的規則和規定。 ...

  • 發佈於 2021-03-15 17:19
  • 閲讀 ( 65 )

如何讓python和javascript使用json進行通訊

有沒有想過如何在兩種程式語言之間傳送資料?是否嘗試傳送一個物件或多個數據段? ...

  • 發佈於 2021-03-16 01:22
  • 閲讀 ( 80 )

幫助您快速學習的10個基本python示例

... 如何宣告空dict: ...

  • 發佈於 2021-03-16 13:29
  • 閲讀 ( 57 )

什麼是編碼?它是如何工作的?

...甚至遊戲!今天,您將學習它的程式碼,它的用途,以及如何開始學習自己的程式碼。 ...

  • 發佈於 2021-03-18 05:18
  • 閲讀 ( 80 )