Python 列表推導式進階:結合 lambda 與 map 函數
列表推導式是 Python 中一個非常強大且優雅的特性,它允許你以一種簡潔的方式創建列表。今天我們不僅會深入探討列表推導式的高級用法,還會結合 lambda 函數和 map() 函數,讓你的代碼更加高效和簡潔。
1. 列表推導式基礎
首先,讓我們回顧一下基本的列表推導式。列表推導式的基本語法如下:
new_list = [expression for item in iterable]
例如,我們可以使用列表推導式生成一個包含 1 到 10 的平方的列表:
squares = [x**2 for x in range(1, 11)]
print(squares) # 輸出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
2. 條件語句在列表推導式中的使用
你可以在列表推導式中添加條件語句,以便只處理滿足特定條件的元素。語法如下:
new_list = [expression for item in iterable if condition]
例如,生成一個包含 1 到 10 之間所有偶數的平方的列表:
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(even_squares) # 輸出: [4, 16, 36, 64, 100]
3. 多重循環在列表推導式中的使用
你還可以在列表推導式中使用多重循環,這在處理嵌套結構時非常有用。語法如下:
new_list = [expression for item1 in iterable1 for item2 in iterable2]
例如,生成一個包含兩個列表中所有可能組合的列表:
list1 = [1, 2, 3]
list2 = ['a', 'b']
combinations = [(x, y) for x in list1 for y in list2]
print(combinations) # 輸出: [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b'), (3, 'a'), (3, 'b')]
4. 結合 lambda 函數
lambda 函數是一種匿名函數,可以用于簡單的、一次性使用的函數定義。我們可以在列表推導式中使用 lambda 函數來簡化表達式。
例如,生成一個包含 1 到 10 之間所有數字的立方的列表:
cubes = [(lambda x: x**3)(x) for x in range(1, 11)]
print(cubes) # 輸出: [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
5. 結合 map() 函數
map() 函數是一個內置函數,它接受一個函數和一個可迭代對象,并返回一個將該函數應用于可迭代對象每個元素的結果的迭代器。我們可以在列表推導式中使用 map() 函數來進一步簡化代碼。
例如,生成一個包含 1 到 10 之間所有數字的立方的列表,使用 map() 函數:
cubes = list(map(lambda x: x**3, range(1, 11)))
print(cubes) # 輸出: [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
6. 結合 lambda 和 map() 函數
我們可以將 lambda 函數和 map() 函數結合起來使用,以實現更復雜的操作。例如,生成一個包含 1 到 10 之間所有偶數的立方的列表:
even_cubes = list(map(lambda x: x**3, filter(lambda x: x % 2 == 0, range(1, 11))))
print(even_cubes) # 輸出: [8, 64, 216, 512, 1000]
7. 實戰案例:文本處理
假設我們有一個包含多個字符串的列表,我們想將其中的所有字符串轉換為大寫,并去除空字符串。我們可以使用列表推導式、lambda 函數和 map() 函數來實現這個任務。
strings = ["hello", "", "world", "python", ""]
upper_strings = [s.upper() for s in map(lambda x: x.strip(), strings) if s]
print(upper_strings) # 輸出: ['HELLO', 'WORLD', 'PYTHON']
在這個例子中,我們首先使用 map() 函數和 lambda 函數去除每個字符串的前后空格,然后使用列表推導式將非空字符串轉換為大寫。
總結
本文詳細介紹了 Python 列表推導式的高級用法,包括條件語句、多重循環、結合 lambda 函數和 map() 函數。通過這些技術,你可以編寫出更加簡潔和高效的代碼。最后,我們通過一個實戰案例展示了如何在實際場景中應用這些技術。