函数fold 或reduce用法
http://yi-programmer.com/2011-02-24_fold.html
http://c2.com/cgi/wiki?FoldFunction
http://rwh.readthedocs.org/en/latest/chp/4.html
The PythonLanguage calls it reduce; this is a left fold:
reduce(operator.add, [1,2,3,4])
reduce(lambda x,y: x+y, [1,2,3,4])
You can get the effect of the parameter called initial above by giving an optional third argument.
In Python 3.x it has been moved to "functools.reduce".
python foldl和foldr实现:
def foldl(f,z,xs):
if not xs:
return z
else:
return foldl(f,f(z,xs[0]),xs[1:]) def foldr(f,z,xs):
if not xs:
return z
else:
return f(xs[0],foldr(f,z,xs[1:])) a=[1,2,3,4,5]
import operator
print foldl(operator.add,1,a)
print foldr(operator.add,1,a)
foldl:
(((((init+1)+2)+3)+4)+5)
folr:
(1+(2+(3+(4+(5+init))))))
在函数式语言中,列表这个结构是通过空列表 nil 和操作符 cons 进行定义的,haskell中对应有 [] 和 (:) 的语法糖。所以[1,2,3,4,5] 实际上是 1:[2:[3:[4:[5:[]]]]] ,这样一来,我们可以从一个新的视角看待 fold 操作, foldr (+) [] 操作其实就是将操作符 (:) 替换为 (+) :


参考了:http://stackoverflow.com/questions/9204209/tutorial-for-summation-recursion-in-python
函数fold 或reduce用法的更多相关文章
- 高阶函数 map,reduce, filter的用法
1. map 用法 def fun_C(x): """求平方""" return x ** 2 result = map(fun_C, my ...
- [py][lc]python高阶函数(匿名/map/reduce/sorted)
匿名函数 - 传入列表 f = lambda x: x[2] print(f([1, 2, 3])) # x = [1,2,3] map使用 传入函数体 def f(x): return x*x r ...
- Python内建函数reduce()用法
reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,下面讲述Python内建函数reduce()用法. ...
- Python中用format函数格式化字符串的用法
这篇文章主要介绍了Python中用format函数格式化字符串的用法,格式化字符串是Python学习当中的基础知识,本文主要针对Python2.7.x版本,需要的朋友可以参考下 自python2. ...
- C++ 排序函数 sort(),qsort()的用法
转自:http://blog.csdn.net/zzzmmmkkk/article/details/4266888/ 所以自己总结了一下,首先看sort函数见下表: 函数名 功能描述 sort 对给定 ...
- 转: ES6异步编程:Thunk函数的含义与用法
转: ES6异步编程:Thunk函数的含义与用法 参数的求值策略 Thunk函数早在上个世纪60年代就诞生了. 那时,编程语言刚刚起步,计算机学家还在研究,编译器怎么写比较好.一个争论的焦点是&quo ...
- 转: ES6异步编程:Generator 函数的含义与用法
转: ES6异步编程:Generator 函数的含义与用法 异步编程对 JavaScript 语言太重要.JavaScript 只有一根线程,如果没有异步编程,根本没法用,非卡死不可. 以前,异步编程 ...
- js高阶函数map和reduce
map 举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个数组[1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map实现如下: 由于map()方法定义在JavaScr ...
- Python高阶函数map、reduce、filter、sorted的应用
#-*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.support.wait import Web ...
随机推荐
- Android开源中国客户端学习 (自定义View)左右滑动控件ScrollLayout
左右滑动的控件我们使用的也是非常多了,但是基本上都是使用的viewpager 等 android基础的控件,那么我们有么有考虑过查看他的源码进行定制呢?当然,如果你自我感觉非常好的话可以自己定制一个, ...
- PLSQL 循环示例
<pre name="code" class="sql"><pre name="code" class="sql ...
- 【转】gcc warning: braces around scalar initializer (标量初始化的括号)
原文网址:http://stackoverflow.com/questions/3462513/gcc-warning-braces-around-scalar-initializer I have ...
- linux 虚拟机设置IP访问外网
1 设置网络为桥接模式:(Vmware为例,安装过程中也可以设置) 选中当前的操作系统,点击虚拟机-->设置-->硬件-->网络设备器,勾选桥接模式 2 修改网络配置在命令行界面输入 ...
- 本地plsqldev.exe连接远端oracle数据库
先看百度经验:http://jingyan.baidu.com/article/48b558e3540ecf7f38c09a3c.html 这里如果我们只有安装plsql工具,下载oracle精简版本 ...
- 第04讲- Android项目目录结构分析
学习内容: 1. 认识R类(R.java)的作用 R.java是在建立项目时自动生成的,这个文件是只读模式,不能更改.R类中包含很多静态类,且静态类的名字都与res中的一个名字对应,即R ...
- C++: int和string相互转换
假设在一个C++的程序中常常会用到int和string之间的互换.个人建议能够写成一个函数,下次用的时候直接调用就可以. #include <iostream> #include < ...
- IOS上 关于状态栏的相关设置(UIStatusBar)
知识普及 ios上状态栏 就是指的最上面的20像素高的部分 状态栏分前后两部分,要分清这两个概念,后面会用到: 前景部分:就是指的显示电池.时间等部分: 背景部分:就是显示黑色或者图片的背景部分: 如 ...
- Codeforces 466 E. Information Graph
并查集.... E. Information Graph time limit per test 1 second memory limit per test 512 megabytes input ...
- jQuery validate 的valid()方法一直返回true
1 调用$('#myForm').valid(),一直返回ture eg:html <form id="myForm"> <input class="f ...