map/reduce:
- map():函數(shù)接收兩個(gè)參數(shù)月匣,一個(gè)是函數(shù)承边,一個(gè)是Iterable掖蛤,map將傳入的函數(shù)依次作用到序列的每個(gè)元素,并把結(jié)果作為新的Iterator返回刁标。
- reduce:把一個(gè)函數(shù)作用在一個(gè)序列[x1, x2, x3, ...]上颠通,這個(gè)函數(shù)必須接收兩個(gè)參數(shù),reduce把結(jié)果繼續(xù)和序列的下一個(gè)元素做累積計(jì)算
list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']
#序列求和
>>> from functools import reduce
>>> def add(x, y):
... return x + y
...
>>> reduce(add, [1, 3, 5, 7, 9])
25
序列求和key再簡化:(使用 lambda)
>>> from functool import reduce
>>> reduce(lambda x,y:x+y, [1,3,5,7,9])
25
filter():
- filter():filter()也接收一個(gè)函數(shù)和一個(gè)序列膀懈。和map()不同的是蒜哀,filter()把傳入的函數(shù)依次作用于每個(gè)元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素
def is_odd(n):
return n%2 == 1
list(filter(is_odd, [1,2,3,4,5,6,7,8,9,10]))
[1, 3, 5, 7, 9]
filter()函數(shù)返回的是一個(gè)Iterator吏砂,也就是一個(gè)惰性序列,所以要強(qiáng)迫filter()完成計(jì)算結(jié)果乘客,需要用list()函數(shù)獲得所有結(jié)果并返回list
sorted():
- sorted():可以對(duì)list進(jìn)行排序,同時(shí)也是一個(gè)高階函數(shù)狐血,它還可以接收一個(gè)key函數(shù)來實(shí)現(xiàn)自定義的排序
#簡單用法:
>>> sorted([36,5,-12,-5,9])
[-12, -5, 5, 9, 36]
#高階使用:
>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
#key指定的函數(shù)將作用于list的每一個(gè)元素上,并根據(jù)key函數(shù)返回的結(jié)果進(jìn)行排序易核。對(duì)比原始的list和經(jīng)過key=abs匈织, 處理過的list:
list = [36, 5, -12, 9, -21]
keys = [36, 5, 12, 9, 21]
#然后sorted()函數(shù)按照keys進(jìn)行排序,并按照對(duì)應(yīng)關(guān)系返回list相應(yīng)的元素:
keys排序結(jié)果 => [5, 9, 12, 21, 36]
| | | | |
最終結(jié)果 => [5, 9, -12, -21, 36]
#忽略大小寫牡直,給字母排序:
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']