1. 概述
python中内置了map、reduce、filter、sorted这四个高阶函数。下面将详细讲解着四个高阶函数的用法.
2. map
map函数接收一个函数f和一个列表lis,作用是将函数f作用于map中的每个元素上,并形成新的列表返回。示例如下:
# 计算x的平方
def add(x):
return x ** 2
lis = [1, 2, 3, 4, 5]
# 这里调用map函数,相当于求lis列表中的每个元素的的平方
result = map(add, lis)
for element in result:
print(element)
最后的输出结果如下:
从结果中可以看出,其将列表lis中的每个元素的平方组成了一个map对象,然后返回给变量result。
3. reduce
reduce函数以前是内置在python中的,但在python3以后被放到了functools包下。其接收两个参数,一个列表lis和一个函数f,并且与map函数不同的是函数f必须有接收两个参数, 其作用是将函数f作用于列表lis中的每个元素,但与map不同的是,函数reduce会先用函数f先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用f函数运算,最后得到一个结果。 实例如下:
# 计算x和y的和
def add(x,y):
return x+y
from functools import reduce
lis = [1, 2, 3, 4, 5]
# 调用reduce函数,计算lis中所有数的和
result = reduce(add,lis)
print(result)
最后输出结果为:
4. filter
filter函数是一个内置的函数,其接收一个列表lis和函数f,其作用是对lis中的每个元素进行判断,返回True或False,该函数会自动根据过滤结果留下符合条件的元素。实例如下:
lis = [1, 2, 3, 4, 5, 6, 7, 89, 92]
result = filter(lambda x: x % 2 == 0, lis)
print(result)
for element in result:
print(element)
根据前面描述,可以很容易看出上面函数是选出传入列表lis中的偶数的,所以其输出结果如下:
从结果可以看出,其最后返回一个filter类型的可迭代对象result。
5. sorted
sorted函数是排序函数,其接受一个可迭代对象,并且按照指定的顺序和关键字给其排序,然后返回结果,实例如下:
lis = [-1, -2, -33, 1, 2, 3, -55, -5, 4, 5, 6, 7, 89, 92]
# 对lis排序,并且按照绝对值从大到小的顺序排列
result = sorted(lis, key=abs,reverse=True)
print(result)
上面的实例表示对传入的列表lis按照绝对值从大到小的顺序排列,然后将结果赋给result,最终结果如下图:
附: Sorted函数有四个参数,其中必选参数为一个可迭代类型的对象,还有三个可选的值,分别为参数名为cmp、key以及reverse的值,其中前两个个默认都为None,最后一个默认为False,三个值的具体情况如下:
- key:key指定一个接收一个参数的函数,这个函数用于从每个元素中提取一个用于比较的关键字。默认值为None(即用元素本身进行比较)。 上面的实例中则是提取出了每个元素的绝对值进行比较。即该参数指定的是用于排序的键,比如
key=object.attribute
将会使用属性attribute来对object来进行排序。 - cmp:cmp指定一个定制的比较函数,这个函数接收两个参数(iterable的元素),如果第一个参数小于第二个参数,返回一个负数;如果第一个参数等于第二个参数,返回零;如果第一个参数大于第二个参数,返回一个正数。默认值为None。
- reverse:reverse是一个布尔值。如果设置为True,列表元素将被倒序排列。
6、all函数
该函数是用于判断给定的可迭代参数中的元素是否都为True,如果是,则返回True,如果不是,则返回False,一般来讲,元素除了是 0、空、None、False 外都算 True。实例如下:
# 以下实例表示判断lis2中的元素是否都在lis1中,如果是,输出True,否则输出False
lis1 = [1,2,3,4,5,6,7,8]
lis2 = [4,1,6,8]
if all(lis2[i] in lis1 for i in range(0,len(lis2))):
print(True)
else:
print(False)