10、Python_高階函式map/reduce/filter/sorted
1、map的使用:
map()函式可以把傳入的函式作用到傳入的Iterable中的每一個元素。
例:f(x)=x2(平方),要把這個函式作用在一個list[1,2,3,4,5,6,7,8,9]
def f(x):
return x*x
r=map(f,[1,2,3,4,5,6,7,8,9])
2、reduce的用法:
reduce
把一個函式作用在一個序列[x1, x2, x3, ...]
上,這個函式必須接收兩個引數,reduce
把結果繼續和序列的下一個元素做累積計算
例1:對一個序列求和
from functools import reduce
def add(x+y):
return x+y
reduce(add,[1,2,3,45,5,6,7,8])
例2:將字串轉成int
原始版本->
from functools import reduce
def fn(x,y):
return x*10+y
reduce(fn,[1,3,5,7,9])
近代版本->
from functools import reduce
def fn(x,y):
return x*10+y
def char2num(s):
digits ={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
return didits[s]
reduce(fn,map(char2num,'13467'))
現代版本->
from functools import reduce
DIGITS={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
def str2int(s):
def fn(x,y):
return x*10+y
def char2int(c):
return DIGITS[c]
return reduce(fn,map(char2int,s))
未來超級版本->
from functools import reduce
DIGITS={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
def char2num(s):
return DIGITS[s]
def str2int(s):
return reduce(lambda x,y:x*10+y,map(char2num,s))
3、filter用法:
filter()
也接收一個函式和一個序列,傳入的函式依次作用於每個元素,然後根據返回值是True
還是False
決定保留還是丟棄該元素
例:刪除list中偶數,只留下奇數
def is_odd(n):
return n%2 ==1
list(filter(is_odd,[1,2,4,5,6,7,8,9,32]))
4、sorted的用法:
sorted用於排序
例1:簡單排序
sorted([35,22,-44,54,234,4,65,224])
例2:接收一個key函式來實現自定義排序
sorted([35,22,-44,54,234,4,65,224],key=abs)
按絕對值來排序
例3:對字串排序
sorted(['bob','jack','Rose','City'],key=str.lower,reverse=True)
這裡先將字串變成小寫,再反向排序