python的map和reduce函數


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

https://www.runoob.com/python/python-func-reduce.html

https://blog.csdn.net/ctan006/article/details/79657678


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM