Python3之三个内置高阶函数map、filter、sorted

什么是高阶函数?

  1. 函数接收一个或多个函数作为参数传入
  2. 函数返回一个函数
    只要满足以上一条的函数就是高阶函数了

map函数

map(function, *iterable) 返回一个可迭代对象,此可迭代对象用函数function对可迭代对象iterable中的每一个元素作为参数计算后得到新的数据。

举个栗子就懂了,文字叙述有点绕
如:求1-9的每个元素的平方:

def power(x):
    return x ** 2

for x in map(power, range(1, 10)):
    print(x, end=' ')  # 1 4 9 16 ... 81

map(power, range(1, 10))先看这条语句,其中power是上边的函数名,range不用说了,是一个可迭代对象。那么它执行的流程是什么呢?

  1. 先拿出 1 传给power,然后return 1^2 -> 1
  2. 再拿出 2 传给power,然后return 2^2 -> 4
  3. 再拿出 3 传给power,然后return 3^2 -> 9
  4. 最后拿出 9 传给power,然后return 9^2 -> 81
    总起来就是说可以这么理解:可迭代对象有多少个就调用多少次对应的函数
    配个debug图:
    这里写图片描述

可迭代对象不一定只有一个,但必须和函数形参个数相同,再举个栗子:
如:#生成一个可迭代对象,可以提供:1^4,2^3,3^2,4^1

def mypow(x, y):
    return x ** y

for i in map(mypow, [1, 2, 3, 4], (4, 3, 2, 1)):
    print(i, end=' ')

filter函数

filter(function, iterable)

filter函数的作用:
  1. 筛选可迭代对象iterable中的数据,返回一个可迭代对象,此可迭代对象只返回iterable中符合条件的数据
  2. function将对iterable中提供的每个数据进行布尔求值,True则保留,否则丢弃

举个栗子:以列表的形式打印1-10之间的奇数

def isodd(x):
    return x % 2 == 1

L = list(filter(isodd, range(10)))
print('L=', L)  # L= [1, 3, 5, 7, 9]

filter(isodd, range(10)) 先看这条,执行过程同map一样,只不过filter返回的是True或False
如果是map返回是什么呢?

L= [False, True, False, True, False, True, False, True, False, True]

filter可以了解为一个过滤器,如果返回的是True,就保留让它返回True的这个数据,否则的话就丢弃

再举个栗子:求1-100之间的素数(用filter实现)

def isprime(x):
    if x < 2:
        return False
    for i in range(2, x):
        if x % i == 0:  # 一旦整除,x一定不是素数
            return False
    return True

L = list(filter(isprime, range(100)))
print('L=', L)
# 结果:L= [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

sorted函数

sorted函数的作用:

将原可迭代对象的数据进行排序,生成排序后的列表

函数的参数格式:

sorted(iterable, key=None, reverse=False)

参数说明:
  • iterable 可迭代对象
  • key 函数是用来提供一个值,将这个值作为排序的依据,如果不给出这个key函数,则用原数据的值进行比较和排序

    举几个栗子:

>>> L = [5 , -2, -4, 0, 3, 1]
>>> L2 = sorted(L)
>>> L2
[-4, -2, 0, 1, 3, 5]

>>> L3 = sorted(L, reverse=False)
>>> L3
[-4, -2, 0, 1, 3, 5]

>>> L4 = sorted(L, reverse=True)
>>> L4
[5, 3, 1, 0, -2, -4]

以上栗子解释reverse的作用:默认为False升序,可以不写,如果是True则为降序

>>> L5 = sorted(L, key=abs)
>>> L5
[0, 1, -2, 3, -4, 5]

以上栗子解释key值使用内置函数,abs是绝对值,也就是按绝对值的大小来排序,key的函数也可以自定义
如:
按字符串的反序排序

names = ['Tom', 'Jerry', 'Spike', 'Tyke']
def mysorted(L):  # 依次传入name的值
    return L[::-1]  # 将name字符串反转

print(sorted(names, key = mysorted))
# 结果: ['Spike', 'Tyke', 'Tom', 'Jerry']

提示:反转后的names列表是:
names = [‘Tyke’, ‘Spike’, ‘Jerry’, ‘Tom’] ,然后按照这个排序

本节完

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秒不可闫M先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值