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

map 和 reduce 和 filter 函式

①從引數方面來講:
map()包含兩個引數,第一個引數是一個函式,第二個是序列(列表 或元組)。其中,函式(即 map的第一個引數位置的函式)可以接收一個或多個引數。
reduce()第一個引數是函式,第二個是序列(列表或元組)。但是,其函式必須接收兩個引數。


②從對傳進去的數值作用來講:
map()是將傳入的函式依次作用到序列的每個元素,每個元素都是獨自被函式“作用”一次 。
reduce()是將傳人的函式作用在序列的第一個元素得到結果後,把這個結果繼續與下一個元素作用(累積計算)

>>> def f(x):
...   return x * x
...
>>> map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
[1, 4, 9, 16, 25, 36, 49, 64, 81]

map()傳入的第一個引數是f,即函式物件本身。map()作為高階函式,事實上它把運算規則抽象了,因此,我們不但可以計算簡單的f(x)=x2,還可以計算任意複雜的函式,比如,把這個list所有數字轉為字串:

>>> map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])
['1', '2', '3', '4', '5', '6', '7', '8', '9']

reduce把一個函式作用在一個序列[x1, x2, x3...]上,這個函式必須接收兩個引數,reduce把結果繼續和序列的下一個元素做累積計算,其效果就是:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
>>> def fn(x, y):
...   return x * 10 + y
...
>>> reduce(fn, [1, 3, 5, 7, 9])
13579
#把序列[1, 3, 5, 7, 9]變換成整數13579

>>> def add(x, y):
...   return x + y
...
>>> reduce(add, [1, 3, 5, 7, 9])
25

filter() 函式用於過濾序列,過濾掉不符合條件的元素,返回一個迭代器物件,如果要轉換為列表,可以使用 list() 來轉換。

該接收兩個引數,第一個為函式,第二個為序列,序列的每個元素作為引數傳遞給函式進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。

filter(function, iterable)
  • function -- 判斷函式, iterable -- 可迭代物件。 返回一個迭代器物件
#過濾出列表中的所有奇數
def is_odd(n):
    return n % 2 == 1
 
tmplist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
newlist = list(tmplist)
print(newlist)
#輸出結果
[1, 3, 5, 7, 9]