一尘不染

计算Python数组中的连续正值

python

我正在尝试计算股票收益数据中连续上升的天数-
因此,如果正数日为1,负数为0,则y=[0,0,1,1,1,0,0,1,0,1,1]应该返回一个列表z=[0,0,1,2,3,0,0,1,0,1,2]

我来到了一个解决方案,它在代码行数方面很整洁,但是 非常 慢:

import pandas
y=pandas.Series([0,0,1,1,1,0,0,1,0,1,1])
def f(x):
    return reduce(lambda a,b:reduce((a+b)*b,x)
z=pandas.expanding_apply(y,f)

我猜想我遍历整个列表太多次了。是否有一种很好的Pythonic方式可以实现我想要的,而只需要遍历一次数据?我可以自己编写一个循环,但想知道是否有更好的方法。

谢谢!


阅读 178

收藏
2021-01-20

共1个答案

一尘不染

为什么痴迷于超pythonic的做事方式?可读性+效率胜过“ leet hackerz风格”。

我只是这样做:

a = [0,0,1,1,1,0,0,1,0,1,1]
b = [0,0,0,0,0,0,0,0,0,0,0]

for i in range(len(a)):
    if a[i] == 1:
        b[i] = b[i-1] + 1
    else:
        b[i] = 0
2021-01-20