微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

计算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方法可以实现我想要的,而只需要浏览一次数据?我自己可以写一个循环,但想知道是否有更好的方法.

谢谢!

解决方法:

为什么对超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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐