python中内置的高阶函数(map、filter、reduce、sorted、all)

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,三个值的具体情况如下:

  1. key:key指定一个接收一个参数的函数,这个函数用于从每个元素中提取一个用于比较的关键字。默认值为None(即用元素本身进行比较)。 上面的实例中则是提取出了每个元素的绝对值进行比较。即该参数指定的是用于排序的键,比如key=object.attribute将会使用属性attribute来对object来进行排序。
  2. cmp:cmp指定一个定制的比较函数,这个函数接收两个参数(iterable的元素),如果第一个参数小于第二个参数,返回一个负数;如果第一个参数等于第二个参数,返回零;如果第一个参数大于第二个参数,返回一个正数。默认值为None。
  3. 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)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值