Skip to main content
 首页 » 编程设计

python使用lambda使用foldleft计算间隔

2025年05月04日15rubylouvre

def tointervals(tlist): 
      count=0 
      for i in tlist: 
        if count == 0: 
          count = count + 1 
          yield 0 
        else: 
          count = count + 1 
          yield i - tlist[count -2] 

我是这样测试的:

In [272]: list(tointervals([1,2,3,4,10])) 
Out[272]: [0, 1, 1, 1, 6] 

太好了,这正是我要找的

但我想以更实用的方式来做(我主要使用 Scala)

我对此非常困惑,主要是因为不熟悉 Python。在最终的困惑中放弃之前,我得到的最接近的是这个。

In [292]: reduce(lambda x,y: (x[0] + [y - x[0][x[1]] ],x[1]+1), [1,2,3,4,10], ([0],0)) 
Out[292]: ([0, 1, 1, 2, 2, 8], 5) 

这显然是错误的,但这是我尝试的方向......我是在愚蠢地尝试使用 reduce,还是我可以不为太妃糖编写代码?请温柔点。

请您参考如下方法:

列表推导会更像 pythonic:

>>> l = [1, 2, 3, 4, 10] 
>>> [y-x for x, y in zip(l, l[1:])] 
[1, 1, 1, 6]