在Python中,map()
和 filter()
是兩個強大的內建函數,經常與匿名函數(如 lambda
)或其他可重用的函數一起使用。這兩個函數主要用於處理可迭代對象(如列表、元組等)以便進行映射或過濾操作。
map()
函數map()
函數將一個函數應用到一個可迭代對象(如列表)的每一個元素上,並返回一個新的可迭代對象(如列表、元組、生成器等),包含應用該函數後的結果。
map(function, iterable)
function
:要應用的函數,可以是已定義的函數或 lambda
函數。iterable
:可迭代對象,例如列表、元組、字符串等。numbers = [1, 2, 3, 4, 5]
# 使用 lambda 函數計算每個數的平方
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(f"平方後的數字列表: {squared_numbers}")
這段代碼使用 map()
將匿名 lambda
函數應用到列表 numbers
中的每一個數字上,結果是 [1, 4, 9, 16, 25]
。
map()
也可以同時作用於多個可迭代對象,前提是這些可迭代對象的長度相同。
list1 = [1, 2, 3]
list2 = [4, 5, 6]
# 使用 lambda 函數將兩個列表中的元素相加
summed_list = list(map(lambda x, y: x + y, list1, list2))
print(f"兩個列表相加後的結果: {summed_list}")
結果會是 [5, 7, 9]
,即將 list1
和 list2
中的對應元素相加。
filter()
函數filter()
函數用來過濾可迭代對象中的元素,根據一個指定的函數來判斷元素是否符合條件。返回的結果是一個包含符合條件的元素的可迭代對象。
filter(function, iterable)
function
:判斷條件的函數,該函數返回布爾值(True
或 False
)。iterable
:可迭代對象,範圍可以是列表、元組等。numbers = [1, 2, 3, 4, 5, 6]
# 使用 lambda 函數過濾出偶數
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(f"偶數列表: {even_numbers}")
這裡 filter()
用來過濾出 numbers
列表中的偶數,結果是 [2, 4, 6]
。
words = ["apple", "banana", "kiwi", "pear"]
# 使用 lambda 函數過濾出長度大於3的單詞
long_words = list(filter(lambda x: len(x) > 3, words))
print(f"長度大於3的單詞: {long_words}")
這裡 filter()
會篩選出長度大於 3 的單詞,結果是 ['apple', 'banana', 'pear']
。
map()
與 filter()
的區別map()
:將指定的函數應用到可迭代對象的每一個元素上,返回應用後的結果。filter()
:根據指定的函數過濾出符合條件的元素,返回符合條件的元素。map()
與 filter()
的區別示例map()
將數字平方:numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # [1, 4, 9, 16, 25]
filter()
過濾出偶數:even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # [2, 4]