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]
