计算Python数组中的连续正值

发布于 2021-01-29 14:55:31

我正在尝试计算股票收益数据中连续上升的天数-
因此,如果正数日为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方式可以实现我想要的,而只需要遍历一次数据?我可以自己编写一个循环,但想知道是否有更好的方法。

谢谢!

关注者
0
被浏览
108
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    为什么痴迷于超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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看