python学习笔记(九)函数式进阶:使用map、reduce、filter、sorted
来源:互联网 发布:闪电战2mac版无限子弹 编辑:程序博客网 时间:2024/04/29 01:46
在第三节中简单学习了函数式的概念,这里通过运用几个常用的高阶函数来熟悉函数式编程方法,在文末给出一个综合性例子。
开始
这四个高阶函数具有相似的参数结构,都是以其中一个参数为列表,另一个参数为函数。不同的是它们的功能。
map
map的作用简单来说是将列表中各个元素冠以函数头。即将函数映射作用到每一个元素上.(格式:map(函数,列表))
def mp(a): print a return al = [1,2,3,4]map(mp,l)
在这个过程中产生了副作用:打印元素值,在纯函数式编程中是没有这类副作用的。
reduce
如果说map是把每个元素戴上函数的帽子,那么reduce就是将列表的头直接换成函数头。
列表结构类似于一个链表,每一个结点包含当前元素值以及之后元素的指针,且每个结点有一个“列表头”,因此对其进行reduce操作相当于一个递归函数。
传入的函数必须满足其参数性质为:第一个参数为之后的结点计算得出的元素值,第二个参数为当前的结点(可能为空)。
格式:reduce(函数,列表)
reduce(f,[1,2,3,4]) => f(f(f(1,2),3),4)
inorder = [3,2,4,1,6,5,7]def func(other,cur): print other,cur return curreduce(func,inorder)
filter
filter作用是将满足函数条件的元素全部滤除。因此传入的函数必须为返回true或false的函数。
inorder = filter(lambda(a):a>5,inorder)
sorted
sorted作用是按照函数规则进行排序。函数规则是:返回-1代表二者是逆序关系,返回1代表二者是顺序关系,返回0代表二者等序。
具体实现见例子。
一个例子
import mathimport functoolsclass item(object): def __init__(self,x,y): self.__x = x self.__y = y @property def x(self): return self.__x @x.setter def x(self,value): self.__x = value @property def y(self): return self.__y @y.setter def y(self,value): self.__y = value @property def power(self): return math.sqrt(self.__x*self.__x+self.__y*self.__y)def func_sort_with(member): def item_compare(a,b): i1 = eval('a.'+member) i2 = eval('b.'+member) if i1>i2: return -1 elif i2>i1: return 1 return 0 return functools.partial(sorted,cmp = item_compare)def print_name(it): print str(it.x)list_src = [item(i,10-i) for i in range(1,10)]f1 = func_sort_with('x')list_1 = f1(list_src)print 'sort with x:'map(print_name,list_1)f2 = func_sort_with('power')list_2 = f2(list_src)print 'sort with power'map(print_name,list_2)
其中f1、f2是用闭包得到的函数,可以根据传入的参数选择类的成员作为其排序依据进行排序;eval()是可以将字符串作为python代码执行的函数;使用map是一种简便的遍历列表的写法。
参考资料:
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00141861202544241651579c69d4399a9aa135afef28c44000
- python学习笔记(九)函数式进阶:使用map、reduce、filter、sorted
- python学习笔记,map/reduce,filter,sorted
- python函数式编程(一)map/reduce、filter、sorted
- Python学习2--高阶函数map、reduce、filter、sorted
- python学习 高阶函数/map()/reduce()/filter()/sorted()
- Python学习-高阶函数Map/reduce/filter/sorted
- python中的map,reduce,filter,sorted函数
- python笔记【map(),reduce(),filter(),sorted()】
- Python函数式编程之map/reduce/filter进阶
- Python学习(八)——map、reduce、filter、sorted
- python学习(9)高阶函数map、reduce、filter、sorted
- Python函数式编程(高阶函数、map()、reduce()、filter()、sorted()、lambda、decorator装饰器)
- Python学习笔记: Python3中map、filter、reduce函数
- Python map,filter,reduce函数学习
- Python函数式编程(高阶函数 <map/reduce filter sorted> 返回函数 匿名函数 装饰器 偏函数)
- Python教程学习简记8--Python 高阶函数 map/reduce filter sorted
- Python函数式编程学习:lambda, map, reduce, filter
- Python函数式编程学习:lambda, map, reduce, filter
- Linux基础学习之bash shell内置命令----type
- 大整数的4则运算
- POJ
- BroadcastReceiver使用详解
- Gym
- python学习笔记(九)函数式进阶:使用map、reduce、filter、sorted
- 正则表达式特殊字符
- lec2 PC Programming & Booting 学习笔记
- UVA
- numpy学习笔记-用于布尔型数组的方法
- 获取时间
- 动态顺序表的实现(c语言版本)
- Spring MVC源码分析
- POJ2184:Cow Exhibition(变种01背包)