Python一个有意思的地方:reduce、map、filter

今天阅读了关于Python函数式编程的系列文章,地址在这里:

http://www.cnblogs.com/huxi/archive/2011/06/24/2089358.html

里面提到了四个内建迭代函数:reduce、map、filter、zip。其中zip是供同时迭代多个迭代器用的,这里就不讨论了。主要讨论剩下的三个。

我发现一个有意思的事情,就是剩下的三个函数,reduce、map和filter,三者可以相互转换。例如以reduce为基础,可以实现map和filter函数如下:

1 def _map(func, iterable):
2     return reduce(lambda lst, x: lst.append(func(x)) or lst, iterable, [])
3
4 def _filter(func, iterable):
5     return reduce(lambda lst, x: lst.append(x) or lst if func(x) else lst, iterable, [])

上面的or操作符是用作流程控制的, lst.append(x) or lst 会将x添加到lst中去, 然后返回lst,因为lst.append(x)会返回None。

基于map或filter去实现其他的函数也是可以的,只不过它们都不像基于reduce实现的map和filter那样简洁。贴出实现如下:

这个是基于map去实现reduce和filter:

 1 #map as the base
 2
 3 def _reduce(func, iterable, init):
 4     result = init
 5     map(lambda x: result = func(result, x), iterable)
 6     return result
 7
 8 def _filter(func, iterable):
 9     lst= []
10     map(lambda x: lst.append(x) if func(x), iterable)
11     return lst

这个是基于filter去实现另外两者:

 1 #filter as the base
 2
 3 def _reduce(func, iterable, init):
 4     result = init
 5     filter(lambda x: result = func(result, x), iterable)
 6     return result
 7
 8 def _map(func, iterable):
 9     lst = []
10     filter(lambda x: lst.append(func(x)), iterable)
11     return lst

可以发现它们大同小异,不是很有意思。

时间: 2024-11-09 06:21:22

Python一个有意思的地方:reduce、map、filter的相关文章

Python interview - reduce & map & filter

Python有很多有用有趣的内置函数,比如reduce,map,filter,lambda,zip等.已经写过了lambda和zip相关的博客.继续写关于reduce,map,filter. Map 首先用help方法看一下map的具体用法. help(map) # result Help on built-in function map in module __builtin__: map(...) map(function, sequence[, sequence, ...]) -> lis

python一个注意的地方

https://www.zhihu.com/question/25874136 class test: l=[] def init(self): self.l=['1','2','7'] a1=test() a1.init()如果我这样定义一个类的话,执行了init方法后,a1.l的值为['1','2','7'],test.l的值为[].但是如果改成这样子: class test: l=[] def init(self): self.l.append(1) self.l.append(2) se

[译]PYTHON FUNCTIONS - MAP, FILTER, AND REDUCE

map, filter, and reduce Python提供了几个函数,使得能够进行函数式编程.这些函数都拥有方便的特性,他们可以能够很方便的用python编写. 函数式编程都是关于表达式的.我们可以说,函数式编程是一种面向表达式的编程. Python提供的面向表达式的函数有: map(aFunction, aSequence) filter(aFunction, aSequence) reduce(aFunction, aSequence) lambda list comprehensio

Python【map、reduce、filter】内置函数使用说明

介绍下Python 中 map,reduce,和filter 内置函数的方法: 一:map map(...)     map(function, sequence[, sequence, ...]) -> list 说明: 对sequence中的item依次执行function(item),执行结果输出为list. 例子: >>> map(str, range(5))           [, , , , ]        >>>  add(n): n+>&

Python 函数式编程--高阶函数Map、Reduce、Filter、Sorted

1.1   高阶函数 变量可指向函数 >>> abs(-10) 10 >>> x = abs    --x指向abs函数 >>> x(-1)      --直接调用x 1 调用abs和调用x完全相同. 函数名也是变量 >>> abs = 10 >>> abs(-10) Traceback (most recent call last): File "<stdin>", line 1,

Python里的map、reduce、filter、lambda、列表推导式

Map函数: 原型:map(function, sequence),作用是将一个列表映射到另一个列表, 使用方法: def f(x): return x**2 l = range(1,10) map(f,l) Out[3]: [1, 4, 9, 16, 25, 36, 49, 64, 81] Reduce函数 原型:reduce(function, sequence, startValue),作用是将一个列表归纳为一个输出,使用方法: def f2(x,y): return x+y reduce

Python一些特殊用法(map、reduce、filter、lambda、列表推导式等)

Map函数: 原型:map(function, sequence),作用是将一个列表映射到另一个列表, 使用方法: def f(x):     return x**2 l = range(1,10) map(f,l) Out[3]: [1, 4, 9, 16, 25, 36, 49, 64, 81] Reduce函数 原型:reduce(function, sequence, startValue),作用是将一个列表归纳为一个输出, 使用方法: def f2(x,y):     return x

Python中map,filter,reduce的应用

事例1: l=[('main', 'router_115.236.xx.xx', [{'abc': 1}, {'dfg': 1}]), ('main', 'router_183.61.xx.xx', [{'abc': 0}, {'dfg': 1}]), ('main', 'router_52.11.xx.xx', [{'abc': 0}, {'dfg': 1}]), ('main', 'router_183.17.xx.xx', [{'abc': 1}, {'dfg': 1}]) ] 检查参数l

python中filter,reduce,map的用法

filter的用法: 操作表list的内嵌函数'filter' 需要一个函数与一个list它用这个函数来决定哪个项应该被放入过滤结果队列中遍历list中的每一个值,输入到这个函数中如果这个函数返回True, 那么值就放到过滤结果队列中去如果这个函数返回 False,那么这个值就会被跳过 def pick_num(x): if x%3==0: return x r=[2,4,6,8,10] result=list(filter(pick_num,r)) reduce用法: 操作表list的内嵌函数