filter()函數用於過濾序列。
filter()把傳入的函數依次作用於每個元素,然後根據返回值是True還是False決定保留還是丟棄該元素。
filter(function, iterable)
參數:
function -- 判斷函數
iterable -- 可迭代對象
# filter 過濾
num=[2,3,7,9,17,12,5]
filter(lambda y:y>10,num) #輸出:[17,12]
# filter 過濾
nums = [2,3,6,12,15,18]
def nums_res (x):
return x % 2 == 0 and x % 3 == 0
print filter(nums_res, nums)
輸出:[1, 3, 5, 7, 9]
# filter 過濾 (只保留奇數)
def is_odd(n):
return n % 2 == 1
filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])輸出: [1, 5, 9, 15]
map() 會根據提供的函數對指定序列做映射。
map()函數接收兩個參數,一個是函數,一個是Iterable(可迭代對象),map將傳入的函數依次作用到序列的每個元素,並把結果作為新的Iterator返回。
map() 函數語法:
map(function, iterable, ...)
參數
function -- 函數,有兩個參數
iterable -- 一個或多個序列
#map 函數
map(lambda x, y: x+y,[1,3,5,],[2,4,6])
# 結果如下:
[3,7,11,15,19]
#map 函數
map(int,'1234')
# 結果如下:
[1,2,3,4]
#map 函數
def f(x):
return x*x
print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
#輸出結果:
[1, 4, 9, 10, 25, 36, 49, 64, 81]
#注意:map()函數不改變原有的 list,而是返回一個新的 list。
reduce()函數在庫functools裡,如果要使用它,要從這個庫裡導入。
reduce函數與map函數有不一樣地方,map操作是並行操作,reduce函數是把多個參數合併的操作,也就是從多個條件簡化的結果,在計算機的算法裡,大多數情況下,就是為了簡單化。比如識別圖像是否是一隻貓,那麼就是從眾多的像素裡提煉出來一個判斷:是或否。可能是幾百萬個像素,就只出來一個結果。在GOOGLE大規模集群裡,就是利用這個思想,把前面並行處理的操作叫做map,並行處理之後的結果,就需要簡化,歸類,把這個簡化和歸類的過程就叫做reduce。由於reduce只能在一臺主機上操作,並不能分布式地處理,但是reduce處理的是map結果,那麼意味著這些結果已經非常簡單,數據量大大減小,處理起來就非常快。因此可以把mapreduce過程叫做分析歸納的過程。
reduce() 函數會對參數序列中元素進行累積。
函數將一個數據集合(鍊表,元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(有兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。
reduce() 函數語法:
reduce(function, iterable[, initializer])參數
function -- 函數,有兩個參數
iterable -- 可迭代對象
initializer -- 可選,初始參數
#reduce 累積
def add(x, y):
return x+y
from functools import reduce
reduce(add, [1,2,3,4])
輸出:10
#reduce 累積
#那如果我們希望是序列的乘積呢,下面代碼的意思就是列表每個元素相乘
from functools import reduce
lst=[1,2,3,4]
print(reduce(lambda x,y: x*y, lst))