如何在 Python 中使用 map() 函數
了解如何使用 Python 的 map() 函數。掌握將函數應用於迭代而不編寫循環,並將映射與列表推導式進行比較。
概述
處理資料集合時,您通常需要對可迭代中的每個項目套用特定的轉換。例如,將字串數字列表轉換為整數,或透過將字串轉換為小寫來規範資料庫字串陣列。 Python 提供了一個名為「map()」的內建工具,而不是寫冗長的「for」循環。
`map(function, iterable)` 函數接受一個轉換函數和一個可迭代作為參數。它將函數應用於可迭代的每個元素並傳回一個迭代器物件(一個“map”物件)。因為它作為迭代器返回,所以計算是延遲執行的:僅在迭代元素時才處理元素,這為大型資料集節省了記憶體。
要立即取得地圖物件的列表表示形式,您必須使用「list()」建構函式轉換結果:「list(map(func, data))」。您可以將任何標準函數、標準庫函數(如“str”或“len”)或使用“lambda”關鍵字聲明的自訂匿名函數直接傳遞給“map()”以進行內聯執行。
程式碼和執行輸出
此腳本演示了使用帶有字串轉換的 map() 函數修改集合、將列表項映射到數字以及使用 lambda 回調。
map_function.py
在編輯器中嘗試# 1. Map string conversion over a list of numbers
numbers = [1, 2, 3, 4]
string_numbers = list(map(str, numbers))
print("Mapped to strings:", string_numbers)
# 2. Square numbers using a lambda function inside map()
squared = list(map(lambda x: x**2, numbers))
print("Squared numbers:", squared)
# 3. Apply custom logic function to items
def normalize_name(name):
return name.strip().capitalize()
names = [" alice", "BOB ", " charlie "]
clean_names = list(map(normalize_name, names))
print("Clean names list:", clean_names)端子輸出
Mapped to strings: ['1', '2', '3', '4']
Squared numbers: [1, 4, 9, 16]
Clean names list: ['Alice', 'Bob', 'Charlie']逐步實施
- 確定要應用於集合中每個元素的轉換函數。
- 呼叫 map(function_name, iterable) 建立轉換元素的惰性迭代器。
- 如果您需要立即將所有元素作為標準清單訪問,請將 map() 呼叫包裝在 list() 內。
- 將 map() 與 lambda 函數結合起來,可實現快速、一次性的內聯轉換。
常見問題解答
map() 比列表推導式好嗎?
社群通常認為清單推導式更具可讀性和Python風格。但是,在應用現有內建函數(如 map(str, list))時,map() 可能會更快,因為它運行最佳化的 C 程式碼循環。
map() 可以接受多個可迭代物件嗎?
是的!如果轉換函數採用多個參數,則可以將多個迭代傳遞給map()。例如,map(lambda x, y: x + y, list1, list2) 將成對新增元素。
相關主題
推薦的 Python 資源
透過相關的互動式教學、備忘單和程式碼比較來擴展您的知識。