带有递归的Python算术函数

问题描述 投票:0回答:1

这可能是通过 pandas 中的滚动函数来完成的,不确定,但我想将以下函数应用于列表,位置 x 的当前状态 S 定义为

S[x] = if S[x-1] > 0 S[x-1] -1 + S[x] else S[x] -1 for x > 1 

可以理解为当前状态-1和当前状态...这是因为我需要做一种之前所有位置-1+当前位置的累加和。

列表示例

[1,1,2,0,0,2]

返回该值

[0,0,1,0,-1,1]

因为:

S[0] = 1 - 1 = 0
S[1] = S[1] - 1 + S[0] = 1 - 1 + 0 = 0
S[2] = S[2] - 1 + S[1] = 2 - 1 + 0 = 1
S[3] = S[3] - 1 + S[2] = 0 - 1 + 1 = 0
S[4] = S[4] - 1 + S[3] = 0 - 1 + 0 = -1
S[5] = S[5] - 1 (no S[4] because the else rule being smaller than 0) = 2 - 1 = 1 

我很确定这可以在 pandas 中完成,但我也对我发送列表的标准 python 函数持开放态度(不过更喜欢 pandas)。

一直在尝试递归,但惨败。

python pandas recursion algebra
1个回答
1
投票

减去 1 然后使用 cumsum

(s-1).cumsum()
0    0
1    0
2    1
3    0
4   -1
5    0

在这里,修改解决方案以适应计算累积和的条件

np.where(((s.shift(1) - 1).cumsum()) > 0, 
         (s-1).cumsum(), 
          s-1)
[ 0,  0,  1,  0, -1,  1]
© www.soinside.com 2019 - 2024. All rights reserved.