1. 程式人生 > >Python高階函式: map reduce filter

Python高階函式: map reduce filter

———————— map ——————

map 是內建函式,不需要匯入模組
map(func,iterable)
引數1; 是每個元素需要執行的函式, 注意: 傳入的是函式名
該函式必須要傳入一個引數, 該函式必須有返回值
引數2: 是一個可迭代物件 (存放多個數據的集合)
作用: 將引數1的函式依次作用在可迭代物件的每一個元素上,會將每個結果封裝成一個可迭代物件,並返回

# 例:  [1,2,3]  --- > ["1","2","3"]
# for迴圈 1  ---> "1"   執行 str
dataList = [1,2,3]
# 注意:結果是一個map
res = map(str,dataList) print(res) # print(type(res)) # 可以將map直接轉換成list print(list(res)) #自定義map函式 def myMap(func,listData): listRes = [] # #獲取每一條資料依次執行函式 for data in listData: res = func(data) listRes.append(res) return listRes dataList = [1,2,3] listRes = myMap(str,dataList) print(listRes) # ["1","2","3"] --> [1,2,3]
listData = ["1","2","3","4","5"] res = map(int,listData) # print(list(res))

————————reduce——————

reduce 不是內建函式, 需要匯入 from functools import reduce
reduce(func,squ)
引數1: 函式, 用來將兩個數進行整合
引數2: 是一個包含多個數據的集合

作用: 一個函式作用在序列上,這個函式必須接收2個引數,reduce把結果繼續和序列的下一個元素累計運算
例: 1 + 2 + 3 +4 +5 ………100 求和
1.迴圈
2.遞迴 sum(100) = sum(99) + 100
3.高階函式: 1 + 2 a + b
原理: res = f(f(f(a,b),c),d)

from  functools import  reduce
# 實現:  1 + 2 + 3 +4 +5 .........100  ---> a + b
def add(a,b):
    return  a + b
listData = list(range(1,101))
res = reduce(add,listData)
# print(res)

————————混用——————

# 任務:  "56589"  ----> 56589  
# 思路:  "56589"  --- "5","6","5","8","9" ---> 5,6,5,8,9 ---->  56589
#     解決              list                    map(,)           reduce()

from  functools import  reduce
def strStr(strData):
    listStr = list(strData)
    def func1(a,b):
        return  a*10 + b
    return  reduce(func1,map(int,listStr))
strData = "562312"
res = strStr(strData)
# print(res)
# print(type(res))

————————filter——————

filter 過濾器 內建函式
filter(func,iterable)
引數1 :函式,用來決定元素是否保留
引數2: 迭代器
作用: 將函式依次作用在迭代器的每一個元素上, 函式會根據該元素的執行結果來決定元素 是(True保留)否(False移除) 保留

# 踢出序列中的奇數...
listData = list(range(1,101))
# print(listData)
def isEven(number):
    if number%2 == 0: #偶數,則保留,%取餘數,餘數等於零,是為偶數
        return True
    return False
res = filter(isEven,listData)
print(res)   #是一個過濾器
print(type(res))
print(list(res))