Python - 列表推導式



Python 中的列表推導式

列表推導式是一種建立列表的簡潔方法。它類似於數學中的集合構建器表示法。它用於基於現有的可迭代物件(例如列表、元組或字串)定義一個列表,並對可迭代物件中的每個元素應用表示式。

Python 列表推導式的語法

列表推導式的基本語法如下:

new_list = [expression for item in iterable if condition]

其中,

  • 表示式是對可迭代物件中的每個專案應用的操作或轉換。
  • 專案是表示可迭代物件中每個元素的變數。
  • 可迭代物件是要迭代的元素序列。
  • 條件(可選)是一個根據指定條件過濾元素的表示式。

Python 列表推導式的示例

假設我們想要將字串“hello world”中的所有字母轉換為大寫形式。使用列表推導式,我們遍歷每個字元,檢查它是否為字母,如果是,則將其轉換為大寫,從而生成一個大寫字母列表:

string = "hello world"
uppercase_letters = [char.upper() for char in string if char.isalpha()]
print(uppercase_letters)  

獲得的結果顯示如下:

['H', 'E', 'L', 'L', 'O', 'W', 'O', 'R', 'L', 'D']

列表推導式和 Lambda

在 Python 中,lambda 是一個用於建立匿名函式的關鍵字。匿名函式是在沒有名稱的情況下定義的函式。這些函式使用lambda關鍵字建立,後跟逗號分隔的引數列表,後跟冒號:,然後是待求值的表示式。

我們可以透過在推導式中將 lambda 函式應用於可迭代物件的每個元素來使用列表推導式和 lambda,從而生成一個新列表。

示例

在下面的示例中,我們使用列表推導式和 lambda 函式將給定列表“original_list”中的每個元素加倍。我們遍歷“original_list”中的每個元素,並應用 lambda 函式將其加倍:

original_list = [1, 2, 3, 4, 5]
doubled_list = [(lambda x: x * 2)(x) for x in original_list]
print(doubled_list)  

以下是上述程式碼的輸出:

[2, 4, 6, 8, 10]

Python 列表推導式中的巢狀迴圈

Python 中的巢狀迴圈是指一個迴圈在另一個迴圈內部,其中內迴圈在外部迴圈的每次迭代中執行多次。

我們可以透過將一個迴圈放在另一個迴圈內部來在列表推導式中使用巢狀迴圈,從而允許從多次迭代中簡潔地建立列表。

示例

在這個例子中,兩個列表中專案的組合以元組的形式新增到第三個列表物件中:

list1=[1,2,3]
list2=[4,5,6]
CombLst=[(x,y) for x in list1 for y in list2] 
print (CombLst)

它將產生以下輸出:

[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]

Python 列表推導式中的條件

Python 中的條件是指使用“if”、“elif”和“else”等語句根據某些條件控制程式碼流。它們允許您根據條件是否計算為“True”或“False”執行不同的程式碼塊。

我們可以透過在可迭代物件之後和迴圈之前包含條件來在列表推導式中使用條件,這將在生成列表的同時根據指定的條件過濾可迭代物件中的元素。

示例

以下示例在列表推導式中使用條件從 1 到 20 生成一個偶數列表:

list1=[x for x in range(1,21) if x%2==0]
print (list1)

我們得到如下輸出:

[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

列表推導式與 for 迴圈

列表推導式和 for 迴圈都用於迭代,但它們在語法和用法方面有所不同。

列表推導式就像 Python 中建立列表的快捷方式。它們允許您透過對現有列表中的每個專案應用操作來生成一個新列表。

另一方面,for 迴圈是一個控制流語句,用於逐個迭代可迭代物件的元素,對每個元素執行程式碼塊。

對於更簡單的操作,通常更喜歡列表推導式,而 for 迴圈為複雜任務提供了更大的靈活性。

使用 for 迴圈的示例

假設我們想要分離字串中的每個字母並將所有非母音字母放入列表物件中。我們可以透過如下所示的 for 迴圈來做到這一點:

chars=[]
for ch in 'TutorialsPoint':
   if ch not in 'aeiou':
      chars.append(ch)
print (chars)

chars 列表物件顯示如下:

['T', 't', 'r', 'l', 's', 'P', 'n', 't']

使用列表推導式的示例

我們可以透過列表推導式輕鬆獲得相同的結果。列表推導式的通用用法如下:

listObj = [x for x in iterable]

應用此方法,chars 列表可以透過以下語句構建:

chars = [ char for char in 'TutorialsPoint' if char not in 'aeiou']
print (chars)

chars 列表將像之前一樣顯示:

['T', 't', 'r', 'l', 's', 'P', 'n', 't']

示例

以下示例使用列表推導式構建一個包含 1 到 10 之間數字的平方值的列表:

squares = [x*x for x in range(1,11)]
print (squares)

squares 列表物件為:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

列表推導式的優點

以下是使用列表推導式的優點:

  • 簡潔性 - 與傳統的 for 迴圈相比,列表推導式更簡潔易讀,使您能夠用更少的程式碼建立列表。

  • 效率 - 列表推導式通常比 for 迴圈更快、更高效,因為它們在 Python 直譯器內部進行了最佳化。

  • 清晰度 - 列表推導式生成更清晰、更具表達力的程式碼,使理解正在執行的操作的目的和邏輯變得更容易。

  • 降低錯誤機率 - 由於列表推導式更緊湊,與傳統的 for 迴圈相比,錯誤的可能性更小,從而降低了程式碼中出現 bug 的可能性。

廣告