有没有一种简单的方法,在一行代码中编写一系列的map/filter/reduce函数?
例如,可以这样写,而不是:
reduce(lambda x, y: x*y, filter(lambda x: x>0, map(lambda x: x - 1, some_list)))
我正在寻找类似以下的内容:
some_list.map(lambda x: x -1, a).filter(lambda x: x>0).reduce(lambda x, y: x*y)
有没有一种简单的方法,在一行代码中编写一系列的map/filter/reduce函数?
例如,可以这样写,而不是:
reduce(lambda x, y: x*y, filter(lambda x: x>0, map(lambda x: x - 1, some_list)))
我正在寻找类似以下的内容:
some_list.map(lambda x: x -1, a).filter(lambda x: x>0).reduce(lambda x, y: x*y)
PyFunctional
可以让你在通过 pip install PyFunctional
安装之后做到这一点。
from functional import seq
seq(some_list).map(lambda x: x -1, a).filter(lambda x: x>0).reduce(lambda x, y: x*y)
这个包可以做比那更多的事情,你可以在github.com/EntilZha/PyFunctional上查看。
chain()
方法开始filter
、map
、reduce
等操作,并通过value()
方法获取结果。使用该库,您可以编写类似以下的代码:from underscore import _
my_array = [10, 48, -1, 30, 20, 0]
result = _(my_array).chain().map(lambda x,*a: x - 1).filter(lambda x: x > 0).reduce(lambda x,y,*a: x*y, 1).value()
我在 Python 3.4.2 中进行了测试,似乎运行良好。
class Mylist(list):
def __init__(self, l):
list.__init__(self,l)
def map(self, f):
return Mylist(map(f, self[:]))
map
、filter
和reduce
方法添加到类中。我已经展示了如何添加map
方法。其他函数将非常相似。map
和filter
函数,但reduce
方法通常不会产生一个列表,因此不能再链接函数了。In [16]: xx = Mylist([1,2,3])
In [17]: xx.map(lambda m: m*2).map(lambda m: m**2)
Out[17]: [4, 16, 36]
Pyterator 也可以做到这一点!
from pyterator import iterate
(
iterate(some_list)
.map(lambda x: x-1)
.filter(lambda x: x>0)
.reduce(lambda x, y: x*y)
)
你可以使用以下命令进行安装
pip install git+https://github.com/remykarem/pyterator#egg=pyterator
list.stream().map(x-> x - 1).filter(x-> x > 0).reduce((x, y)-> x * y)
。 - Santhosh