map、reduce、filter、sorted这四种高阶函数有一个共同特点就是传入一个函数和一个列表,调用不同的函数对列表进行处理。
map:传入的函数一般是对单个对象进行处理,比如大写转小写,求数的绝对值等。Map负责把列表(不只是列表,只要是iterable就行)中每一个元素都带入传入的函数进行处理,返回结果也存入一个列表。
把每个元素进行加2操作:
def add2(x):
return x+2
f=map(add2,range(0,10))
print(list(f))
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
reduce: 传入的函数一般是对两个对象进行处理,比如a+b、a*b、’a’+’b’等。reduce负责把列表(不只是列表,只要是iterable就行)中元素按顺序都带入传入的函数进行处理返回一个处理得到的新的值存入列表首位,继续带入处理,最终结果是一个值,是通过传入的函数对列表进行嵌套处理得到的结果。
对序列进行求和:
from functools import reduce
def add2(x,y):
return x+y
f=reduce(add2,range(0,10))
print(f)
45
filter:也与map、reduce类似,不过filter主要用于判断筛选,传入的函数一般是判断单个对象是否符合要求,符合返回真,不符合返回假,最后函数返回的是一个筛选掉不合格数据的列表。
除去列表中的奇数:
def pd(x):
return x%2==0
f=filter(pd,range(0,10))
print(list(f))
[0, 2, 4, 6, 8]
sorted:主要用于数据排序,传入一个列表(不只是列表,只要是iterable就行),对列表元素进行从小到大排序。传入一个key代表根据key来进行排序,类似于c++algorithm中的sort排序传入cmp函数。还可以传入一个reverse=True代表逆序。
根据名字对学生和成绩进行逆序排序:
def pd(x):
return x[0]
f=sorted([('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)],key=pd,reverse=True)
print(f)
[('Lisa', 88), ('Bob', 75), ('Bart', 66), ('Adam', 92)]