python高阶函数map reduce filter sorted_【Python入门】7.高阶函数之 map( )、reduce( )、filter( )、sorted( )的用法...

目录

高阶函数

map( )函数

reduce( )函数

•【练习】字符串转为整数的函数实现

filter( )函数

•【应用】产生素数的函数实现

sorted( )函数

补充笔记

高阶函数

Higher-order function,即高阶函数。

事实上,变量是可以指向函数的。>>>abs(-2)2>>>f = abs                        #f变量指向函数abs()>>>f(-2)2

而函数名也是变量。>>>abs = 1>>>abs(-1)                        #TypeError: 'int' object is not callable,此时abs不再是函数,而是整数1注:由于abs函数实际上是定义在import builtins模块中的,所以要让修改abs变量的指向在其它模块也生效,要用import builtins; builtins.abs = 10。

既然变量可以指向函数,那么函数也可以传入函数和返回函数,这种函数就叫高阶函数。

map( )函数

map( )是一种高阶函数,它接收两个参数,第一个是函数,第二个是Iterable,即可迭代对象。map( )将函数依次作用于Iterable的每个元素,并将结果以Iterator,迭代器的形式返回。这种方式类似构造出了数学中的映射过程。由于Iterator是惰性序列,可以用list( ) 将其转化为list输出。>>>list(map(str,[1,2,3,4,5,6]))                  #str()可以将整数转化为字符串['1', '2', '3', '4', '5', '6']

我们还能用列表生成器得到同样的结果,但要用到for语句:>>>b = [str(x) for x in [1,2,3,4,5,6]]

['1', '2', '3', '4', '5', '6']

reduce( )函数

reduce( )函数同样接收一个函数和一个Iterable两个参数,不同的是所传入的函数必须要接收两个参数,而reduce是把函数作用的结果继续与序列中下一个元素做累计计算。reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

这个有什么用呢,举个简单的例子,可以把序列转化为相应的整数显示。>>>from functools import reduce                  #加入内置函数reduce>>>def fn(x, y):

...   return(x * 10 + y)

...>>>reduce(fn, [1, 2, 3, 4, 5])12345

【练习】字符串转为整数的函数实现from functools import reduce

d={'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}def str2int(s):

def char2num(s):                          #将字符串的每个字符转化为对应的整数,并组成序列

return d[s]    def fn(x, y):                             #将一个序列转化为对应的整数

return x * 10 + y

return reduce(fn,map(char2num,s))

输出结果如下>>>str2int('0110234')110234

filter( )函数

filter,即过滤的意思,filter( )函数的作用是过滤序列。与上面两个函数一样,接收一个函数与一个序列,而在函数作用于序列的元素之后,根据返回值True或False来保留或移除该元素。如写一个保留奇数的函数:>>>def odd(n):

...    return n % 2 == 1...>>>list(filter(odd,[1, 2, 3, 4, 5, 6, 7, 8]))

[1, 3, 5, 7]

需要注意的是,filter( )函数返回的也是Iterator,惰性序列,需要用list( )来转化才能直接显示计算结果。

【应用】产生素数的函数实现

(以下代码转自廖雪芳的官方网站)def _odd_iter():                             #定义一个初始值为3,且不存在偶数的初始序列生成器

n = 1

while True:

n = n + 2

yield ndef _not_divesible(n):                       #定义筛选函数,不是n的倍数则返回True

return lambda x : x % n > 0def primes():                                #定义一个初始值为2,

yield 2

it = _odd_iter()                         #it为序列n的生成器,初始序列

while True:

n = next(it)                         #返回序列n的第一个值

yield n

it = filter(_not_divesible(n), it)   #过滤序列中为n的倍数的值for n in primes():                           #for循环取值

if n < 100:                              #打印100以为的素数

print(n)    else:        break

sorted( )函数

sort,分类、排序的意思。在Python总sorted( )函数可以将list排序。>>>sorted([5, 9, -55, 90, 1])

[-55, 1, 5, 9, 90]

sort( )函数还能接收一个key函数来自定义排序,也就是先把传入的函数作用于list,根据结果进行排序,把传入的初始序列按照结果的顺序进行排序。如接收一个abs( )函数>>>sorted([5, 9, -55, 90, 1], key = abs)

[1, 5, 9, -55, 90]

还能加入第三个参数reverse=True,进行反向排序>>>sorted([5, 9, -55, 90, 1], key = abs, reverse = True)

[90, -55, 9, 5, 1]

补充笔记

补充几个函数的用法,s.index('x')返回字符串中字符'x'的索引值;s.strip( )函数去除字符串首尾的空格或其他指定字符;s[::-1]把字符串s从尾到头顺序重新排列。

作者:三贝_

链接:https://www.jianshu.com/p/09d4284f33e1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值