map函數時python的高級內置函數
語法為:map(function, iterable, ...)
參數:
function -- 函數
iterable -- 一個或多個序列
將function作用於iterable序列中的每一個元素,並將調用的結果返回
主要是為了並行運算,非常高效
1. 一個輸入參數,輸入為列表
# 1. 一個參數 def map_func(x): res = x**2 return res a1 = map(map_func, [1,2,3]) #直接返回的是object,例如 <map object at 0x000001FEF3457438> print(a1) print(list(a1)) #強制轉換:[1, 4, 9]
2. 一個輸入參數,輸入為元組
a2 = map(map_func, (1,2,3)) print(a2)
3. 兩個輸入參數
# 2. 兩個參數 def map_func_2(x,y): res = x+y return res a3 = map(map_func_2, [1,2,3],[1,2,3]) #同時從兩個序列中取出相同位置的元素,進行運算;但是兩個參數不同長度時會報錯 print(a3) print(list(a3)) # 輸出為:[2, 4, 6]
4. 使用int等類型函數
# 4. 典型應用:int等類型函數 a4 = map(int, [1.5,2.1,3.0]) #同時從兩個序列中取出相同位置的元素,進行運算;但是兩個參數不同長度時會報錯 print(list(a4)) #輸出:[1, 2, 3] a5 = map(int, '12306') #將字符串元素變成整數 print(list(a5)) #輸出:[1, 2, 3, 0, 6]
5. 使用lambda表達式
# 5. 使用lambda函數,x為參數,x**2屬於lambda表達式的返回值 a6 = map(lambda x: x ** 2, [1, 2, 3]) print(a6) print(list(a6)) # 輸出:[1, 4, 9]
reduce函數,與map函數類似,注意在Python3中reduce不再是內置函數,而是集成到了functools中,需要:from functools import reduce
函數將一個數據集合(列表,元組等)中的所有數據進行下列操作:用傳給 reduce中的函數 function(二元函數,兩個參數),先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,依次進行下去直到最后。
用法:reduce(function, iterable[, initializer])
參數:
function -- 函數,有兩個參數
iterable -- 可迭代對象
initializer -- 可選,初始參數
1. "減少"為一個值
from functools import reduce def add_2(x, y): return x+y a7 = reduce(add_2, [1,2,3]) #得到的是一個值,依次執行add_2(1,2),對結果和3執行add_2(add_2(1,2),3),有點類似遞歸運算 print(a7) #輸出為:6
2. lambda表達式調用
# lambda函數使用, x,y為參數,x+y為lambda表達式的返回值 a8 = reduce(lambda x, y: x+y, [1,2,3]) #得到的是一個值,先調用參數1,2,然后對結果和3繼續使用 print(a8) #輸出為:6
3. 減少矩陣維度
# 減少矩陣維度 import numpy as np tmp = np.mat([[1,2,3],[4,5,6],[7,8,9]]) print(tmp) # 輸出為: # [[1 2 3] # [4 5 6] # [7 8 9]] a9 = reduce(lambda x,y: x+y, tmp) #實際是:首先[1,2,3]+[4,5,6] = [5,7,9];然后[5,7,9] + [7,8,9] = [12,15,18] print(a9) # 輸出:[[12 15 18]],是(1,3)的矩陣
其中,還有filter函數也與此類似。
參考:
https://baijiahao.baidu.com/s?id=1594702528079035916&wfr=spider&for=pc
https://blog.csdn.net/wxjsjp/article/details/80638696
https://www.runoob.com/python/python-func-map.html