iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0

在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],即將 list1list2 中的對應元素相加。

貳、 filter() 函數

filter() 函數用來過濾可迭代對象中的元素,根據一個指定的函數來判斷元素是否符合條件。返回的結果是一個包含符合條件的元素的可迭代對象。

一、語法

filter(function, iterable)
  • function:判斷條件的函數,該函數返回布爾值(TrueFalse)。
  • 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]

三、過濾出長度大於 3 的字符串

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]

上一篇
第20天:Lambda函數
下一篇
第22天:生成器
系列文
python30天入門學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言