map函數會根據提供的函數對指定序列做映射。
map函數的定義:
map(function, sequence[, sequence, ...]) -> list
通過定義可以看到,這個函數的第一個參數是一個函數,剩下的參數是一個或多個序列,返回值是一個集合。
function可以理解為是一個一對一或多對一函數,map的作用是以參數序列中的每一個元素調用function函數,返回包含每次function函數返回值的list。
比如要對一個序列中的每個元素進行平方運算:
map(lambda x: x ** 2, [1, 2, 3, 4, 5])
# 返回結果為:
[1, 4, 9, 16, 25]
在參數存在多個序列時,會依次以每個序列中相同位置的元素做參數調用function函數。
比如要對兩個序列中的元素依次求和。
map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
# map返回的list中第一個元素為,參數序列1的第一個元素加參數序列2中的第一個元素(1 + 2),
# list中的第二個元素為,參數序列1中的第二個元素加參數序列2中的第二個元素(3 + 4),
# 依次類推,最后的返回結果為:
[3, 7, 11, 15, 19]
要注意function函數的參數數量,要和map中提供的集合數量相匹配。
如果集合長度不相等,會以最小長度對所有集合進行截取。
當函數為None時,操作和zip相似:
map(None, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
# 返回結果為:
[(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]