dre*_*ves 10 python reduce functional-programming list
你知道reducePython中的方便功能.例如,您可以使用它来总结这样的列表(假装没有内置总和):
reduce(lambda x,y: x+y, [1,2,3,4], 0)
Run Code Online (Sandbox Code Playgroud)
返回(((0 + 1)+2)+3)+4 = 10.
现在如果我想要一个中间总和列表怎么办?在这种情况下,[1,3,6,10].
这是一个丑陋的解决方案.还有更多的pythonic吗?
def reducelist(f, l, x):
out = [x]
prev = x
for i in l:
prev = f(prev, i)
out.append(prev)
return out
Run Code Online (Sandbox Code Playgroud)
DSM*_*DSM 14
我最喜欢的,如果你最近的话:
Python 3.2.1 (default, Jul 12 2011, 22:22:01)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import itertools
>>> itertools.accumulate([1,2,3,4])
<itertools.accumulate object at 0x1006baad0>
>>> list(itertools.accumulate([1,2,3,4]))
[1, 3, 6, 10]
Run Code Online (Sandbox Code Playgroud)
accumulate也接受函数参数[更近期,但是 - 3.3]:
>>> list(itertools.accumulate([1,2,3,4], lambda x,y: x+y))
[1, 3, 6, 10]
>>> list(itertools.accumulate([1,2,3,4], lambda x,y: x+y+1))
[1, 4, 8, 13]
Run Code Online (Sandbox Code Playgroud)
如果您使用生成器来解决它的问题,它会更短,并且更好地遵循函数式编程风格.我也会为x添加默认值0:
def reducelist(f, lst, x=0):
prev = x
for i in lst:
prev = f(prev, i)
yield prev
Run Code Online (Sandbox Code Playgroud)
这绝对是更加pythonic.
| 归档时间: |
|
| 查看次数: |
1454 次 |
| 最近记录: |