【python】map、reduce和filter
阿新 • • 發佈:2019-01-12
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]