map 和 lambda 函式

XieBuWan發表於2024-11-18

map 和 lambda 的用法及規則


1. map 函式

map 是 Python 內建函式,用於對可迭代物件中的每個元素應用一個函式,並返回一個 map 物件(可以轉換為其他資料型別,如列表、元組等)。

語法

map(function, iterable, ...)
  • 引數
    • function:需要應用的函式。
    • iterable:一個或多個可迭代物件。
  • 返回值
    • 一個 map 物件,是惰性計算的結果(類似生成器)。

基本用法

  1. 單個可迭代物件
numbers = [1, 2, 3, 4]
result = map(lambda x: x**2, numbers)
print(list(result))
# 輸出: [1, 4, 9, 16]
  1. 多個可迭代物件
    • 當提供多個可迭代物件時,function 的引數數量必須與可迭代物件的數量一致。
a = [1, 2, 3]
b = [4, 5, 6]
result = map(lambda x, y: x + y, a, b)
print(list(result))
# 輸出: [5, 7, 9]

2. lambda 函式

lambda 是一種匿名函式,用於建立短小的函式表示式。lambda 函式的主體只能有一個表示式,結果會自動返回。

語法

lambda 引數1, 引數2, ...: 表示式
  • 引數:函式引數,可以是位置引數、關鍵字引數等。
  • 表示式:只有一個表示式,返回值是該表示式的結果。

基本用法

  1. 定義和呼叫
add = lambda x, y: x + y
print(add(3, 5))
# 輸出: 8
  1. 與 map 一起使用
numbers = [1, 2, 3, 4]
result = map(lambda x: x**2, numbers)
print(list(result))
# 輸出: [1, 4, 9, 16]
  1. 作為函式引數
def apply_func(func, value):
    return func(value)

result = apply_func(lambda x: x * 10, 5)
print(result)
# 輸出: 50

3. 使用規則

map 的規則

  1. 函式必須可呼叫
    • function 引數需要是一個函式物件,可以是內建函式、自定義函式或 lambda 表示式。
  2. 可迭代物件
    • iterable 引數必須是可迭代物件(如列表、元組、字串等)。
  3. 多輸入可迭代物件
    • 如果有多個可迭代物件,它們的長度應一致,否則會以最短的可迭代物件為準。

lambda 的規則

  1. 只能有一個表示式
    • 不能包含多個語句或複雜邏輯。
  2. 匿名
    • 不會儲存函式名,適用於短期使用的場景。
  3. 可返回值
    • 自動返回表示式的結果,無需顯式寫 return

4. 示例應用

map 和 lambda 的結合

  1. 對列表中的每個元素求平方
python


複製程式碼
numbers = [1, 2, 3, 4]
squares = map(lambda x: x**2, numbers)
print(list(squares))
# 輸出: [1, 4, 9, 16]
  1. 對兩個列表的元素逐一相加
a = [1, 2, 3]
b = [4, 5, 6]
result = map(lambda x, y: x + y, a, b)
print(list(result))
# 輸出: [5, 7, 9]

結合其他函式

  1. 過濾和轉換
    • 結合 filterlambda,先過濾再轉換。
numbers = [1, 2, 3, 4, 5, 6]
even_squares = map(lambda x: x**2, filter(lambda x: x % 2 == 0, numbers))
print(list(even_squares))
# 輸出: [4, 16, 36]
  1. 排序
    • 結合 sorted 對資料進行排序。
data = [{'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}]
sorted_data = sorted(data, key=lambda x: x['age'])
print(sorted_data)
# 輸出: [{'name': 'Bob', 'age': 25}, {'name': 'Alice', 'age': 30}]

5. 注意事項

  1. 可讀性
    • 過於複雜的 lambda 會降低程式碼可讀性,建議用普通函式代替。
  2. 惰性計算
    • map 返回的是惰性物件,需要透過 list() 或其他方式將其轉換為實際資料。
  3. 效率
    • maplambda 更適合簡單操作,對複雜邏輯建議使用普通函式。

6. 小結

  • map:對可迭代物件的元素逐一應用函式,返回一個惰性結果。
  • lambda:建立短小的匿名函式,適合臨時或簡單的計算邏輯。
  • 兩者結合使用,能極大簡化程式碼,尤其在資料處理和函數語言程式設計中。

相關文章