每日10行代128:python计算数组中每个值连续增长的个数

今天想解决个实际问题:假如有一个商品销售情况的表,表中记录着不同商品每个月的销售量。我要怎么查出某个商品销售连续增长的月数呢?
这个问题我用sql没太想到很好的解决办法,于是想着写程序来实现。在程序里面这个问题可以简化成在一个数组里连续增长的个数。
比如一个数组是:xsqk = [1,2,3,4,3,1,2], 我期望得到的结果是:[0,1,2,3,0,0,1] 其中每个 值代表的是连续增长的次数,比如第2个数是2,他只比前面的一个数1大,那么第二个数组对应的位置 就是1,依次类推。
下面是代码:

xsqk = [1,2,3,4,3,1,2]

result = [0,]
n=0
for k,_ in enumerate(xsqk):
    if k==0:
        continue
    else:
        if xsqk[k]> xsqk[k-1]:   # 如果要计算连续增长超过10%的,只需要改成xsqk[k]>1.1* xsqk[k-1]
            n=n+1
        else:
            n=0
        result.append(n)

print(result)
>>>
[0, 1, 2, 3, 0, 0, 1]

其实做出来后,感觉这个问题还是挺简单的,但是想出这段代码还花了我一点的时间,因为开始没想到弄个计数器,一次遍历就可以了,开始想的算法是对每一个数遍历他前面所有的数,依次判断大小。我还想着用递归的写法来实现。

xsqk = [1,2,3,4,3,1,2]

def fun(l):
    if len(l)==1:
        return 0
    elif len(l)>1:
        l_front = l[:-1]
        l_last = l[-1]
        if l_last>l_front[-1]:
            return 1+fun(l_front)
        else:
            return 0


print(fun(xsqk))
>>>
1

但这个递归只能计算出列表最后一个元素是连续多少次增长,效率还是不高。

总结:
有些问题要把算法这块抽离出来单独实现,比如我这个需求,如果按照过程化的思维来看,要判断商品a在5月的销售是连续增长了几个月,那么就需要依次去查他4月、3月、2月……的销售量,然后判断增长了几个月。但是这样反复的查数据库,可能效率会很低,并且假如又换个需求想查他2月是连续增长了几个月,就又需要把这个工作再重复一遍,不如一次性把商品a的销售额都取出来,对整个数组里每个值做连续增长的判断。通过简化,我就不用考虑怎么反复的取数据库的问题,只用考虑怎么处理一个数组的问题了。这也是编程中模块化思维的一个体现吧。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值