第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > Python函数式编程 map/reduce filter和sorted

Python函数式编程 map/reduce filter和sorted

时间:2022-09-16 18:47:44

相关推荐

Python函数式编程 map/reduce filter和sorted

什么是函数式编程?

与面向对象编程(Object-oriented programming)和过程式编程(Procedural programming)并列的编程范式。最主要的特征是,函数是第一等公民,可以定义在函数内外,作为函数参数或返回值,函数的组合。强调将计算过程分解成可复用的函数,典型例子就是map方法和reduce方法组合而成MapReduce 算法。只有纯的、没有副作用的函数,才是合格的函数。

知乎-什么是函数式编程思维?

函数式编程与命令式编程最大的不同其实在于:

函数式编程关心数据的映射,命令式编程关心解决问题的步骤。

所以函数式编程最重要的是数据的映射,要用数学的思维去解决问题,而不是计算机指令。

map/reduce

map()函数接受一个函数,一个或多个可迭代对象,函数作用于迭代对象的每一个元素上并以迭代器返回。

def abs(x):if x > 0:return xreturn -x

#map()返回迭代器,惰性,需要list转化一下a = list(map(abs,[-1,-6,7,10]))>>>a[1,6,7,10]

####求两个list元素的对应乘积返回list

def sub(x,y):

return x * y

a = list(map(sub,[1,2,3],[4,5,6]))

>>>a

[4,10,18]

reduce

Python3已经将reduce()从全局移除,要使用需要从函数与工具导入

>>>from functools import reduce

reduce函数接受的函数必须有两个参数,另一个为list或tuple

从元素开始取两个元素做积累运算

from funtools import reducedef add(x,y):return x + ya = reduce(add,[1,2,3,4,5])>>>a15

还可以将list或者tuple转化为整数

from functools import reducedef tra(x,y):return x*10 + ya = reduce(tra,(1,2,3,4,5))>>>a12345

map()和reduce()配合使用

from functools import reducedef sq(x):return x * x def add(y,z):return y + za = reduce(add,map(sq,[1,2,3]))>>>a14

filter过滤器

filter()接受一个函数,一个序列,函数依次作用在每个元素上,保留Ture丢弃FALSE

###只保留正数

def filt(x):if x > 0:return x#filter返回迭代器,惰性,需要list转换一下a = list(map(filt,[-1,-2,3,4]))>>>a[3,4]

sorted

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

sorted()函数也是一个高阶函数,key可以接受一个函数作用在每个元素上返回

sorted([2,4,1,3,7])[1,2,3,4,7]#key接受函数>>>sorted([1,-5,3,-6],key=abs)[-6,-5,1,3]

#可以传入第三参数reverse=Ture,默认正序为FALSE实现倒序排序

>>>sorted([1,3,5,7,9]reverse=Ture)

[9,7,5,3,1]

######sort函数

a = [1,0,3,5,4]

a.sort()

>>>print(a)

[0,1,3,4,5]

#倒序

a = [1,0,3,5,4]

a.sort(reverse = True)

>>>print(a)

[5,4,3,1,0]

如果需要一个list副本,不要使用赋值方法,这样得到的副本还是原来的list,在内存中指向同一个地址

要使用切片操作,才能得到新的副本

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。