1. 程式人生 > >map函式、filter函式、reduce函式

map函式、filter函式、reduce函式

map函式
map函式的結構為 map(處理方法,可迭代物件) ,相當於for迴圈遍歷可迭代物件中的每一個元素,對每一個元素做指定操作,得到一個和原始資料順序相同的迭代器。(在Python3中最終得到的結果是一個迭代器,可以用list()函式轉化為列表,在Python2中map函式的結果就是一個列表。)
map函式例項
原始方法:

def map_test(array):
    ret = []
    for i in array:
        res = i - 1
        ret.append(res)
    return ret


print(map_test(
l))

採用下面這種方法較第一種方法更靈活,批量修改時只需要修改被呼叫函式即可。

l = [1, 2, 10, 11]


def reduce_one(x):
    return x - 1


def map_test(func, array):
    ret = []
    for i in array:
        res = func(i)
        ret.append(res)
    return ret


print(map_test(reduce_one, l))

採用匿名函式的方式會在靈活的基礎上更加簡潔:

l = [1, 2, 10, 11
] def map_test(func, array): ret = [] for i in array: ret.append(func(i)) return ret print(map_test(lambda x: x - 1, l))

以map函式形式:
注意map函式返回的結果是一個迭代器

l = [1, 2, 10, 11]
res = map(lambda x: x - 1, l)
print(list(res))

filter函式
filter函式的結構為 filer(結果為布林值的函式,可迭代物件),相當於for迴圈遍歷可迭代物件中的每個元素,對每個元素進行指定判斷,如果結果為True則保留該元素,所得結果為一個迭代器。
filter函式例項


原始方法:

movie_people = ["ALucky", "AAlex", "ADog", "MB", "Adsa", "YY"]


def filter_test(array):
    res = []
    for i in array:
        if not i.startswith("A"):
            res.append(i)
    return res


print(filter_test(movie_people))	

較為靈活的方法:

def remove_A(x):
    return x.startswith("A")


def filter_test(func, array):
    ret = []
    for i in array:
        if not func(i):
            ret.append(i)
    return ret


movie_people = ["ALucky", "AAlex", "ADog", "MB", "Adsa", "YY"]
print(filter_test(remove_A, movie_people))

匿名函式寫法:

def filter_test(func, array):
    ret = []
    for i in array:
        if not func(i):
            ret.append(i)
    return ret


movie_people = ["ALucky", "AAlex", "ADog", "MB", "Adsa", "YY"]
print(filter_test(lambda x: x.startswith("A"), movie_people))		

filter函式寫法:

movie_people = ["ALucky", "AAlex", "ADog", "MB", "Adsa", "YY"]
res = filter(lambda x: not x.startswith("A"), movie_people)
print(list(res))

reduce函式
reduce函式結構為 reduce(函式,可迭代物件,初始值),相當於for遍歷可迭代物件中的每一個元素,將所有元素和初始值按照指定函式的操作執行,最終返回一個值。在Python3中reduce函式中呼叫reduce函式必須先匯入模組,即以from functools import reduce開頭。
reduce函式例項
原始方法:

def reduce_test(array, init=None):
    if init == None:
        res = array.pop(0)
        for i in array:
            res *= i
        return res
    else:
        res = init
        for i in array:
            res *= i
        return (res)


l = [1, 2, 3, 100]
print(reduce_test(l))

較靈活的方法:

def multi(x, y):
    return (x * y)


def reduce_test(func, array, init=None):
    if init == None:
        res = array.pop(0)
        for i in array:
            res = func(res, i)
    else:
        res = init
        for i in array:
            res *= func(res, i)
    return res


l = [1, 2, 3, 100]
print(reduce_test(multi, l))

匿名函式的寫法:

def reduce_test(func, array, init=None):
    if init == None:
        res = array.pop(0)
        for i in array:
            res = func(res, i)
    else:
        res = init
        for i in array:
            res = func(res, i)
    return res


l = [1, 2, 3, 100]
print(reduce_test(lambda x, y: x * y, l))

reduce函式:
注意必須先匯入模組

l = [1, 2, 3, 100]
from functools import reduce

res = reduce(lambda x, y: x * y, l)
print(res)