1. 程式人生 > >【python】map、reduce和filter

【python】map、reduce和filter

map函式

map(func, Iterable)
接收一個func函式和一個序列Iterable,將Iterable的每個元素經過func函式處理後,返回一個新的Iterable。
類似列表推導式:[func(item) for item in iterable]

#!/usr/bin/env python
# encoding: utf-8

def sqr(item):
    return item * item

if __name__ == '__main__':
    objList = [1, 2, 3]
    newList = map(sqr, objList)
    print(newList)
    print(list(newList))
    print([sqr(item) for item in objList])
輸出結果:
<map object at 0x006325D0>
[1, 4, 9]
[1, 4, 9]

reduce函式

reduce(function, sequence, initial=None)
接收一個函式function和一個序列sequence,該函式需要接收兩個引數x和y;
若initial的值為None,則function首次呼叫從sequence取兩個元素分別賦值給引數x和y;
若initial的值不為None,則function首次呼叫引數x=initial,另外從sequence取一個元素賦值給引數y;
函式function上一次呼叫的返回結果作為x引數的值,並從sequence剩餘元素中選取一個元素作為引數y的值傳遞給函式function,直到sequence元素選取結束;
返回結果為最後一次function呼叫的返回值。

#!/usr/bin/env python
# encoding: utf-8

from functools import reduce


def add(x, y):
    return x + y


if __name__ == '__main__':
    objList = [1, 2, 3, 4]
    print(reduce(add, objList))
    print(reduce(add, objList, 20))
輸出結果為:
10
30

filter

filter(func, Iterable)
接收一個函式func和一個序列Iterable
函式func用於過濾掉Iterable中不符合條件的元素,返回一個由使得函式func返回值為True的元素組成的新的可迭代物件。

#!/usr/bin/env python
# encoding: utf-8

def func(item):
    return item % 2 == 0


if __name__ == '__main__':
    objList = [1, 2, 3, 4, 5]
    print(filter(func, objList))
    print(list(filter(func, objList)))
輸出結果為:
<filter object at 0x01E52270>
[2, 4]