python for循环优化

一、疑难杂症

  最近工作中遇到一个难题,优化一个项目的计算时间。最初,建立项目时用户少,中间使用了for循环,还是嵌套的,共两层,项目整体运行一次耗时1-2个小时。最近,随着用户量增长,项目耗时达到6-7个小时。显然是不能接受的。

for t, w in user_tags:
        for it, w in tag_items[t]:
            ...some计算...

  上面的计算,外层x内层的次数大于60万。于是,时间就长了。

二、原因分析

  原因很简单就是用户量大,for循环次数极大。当然,机器的性能可能也不高(ps:扩容机器要花钱的)。仔细看这一段代码没问题,逻辑正确,计算简单。于是,冥思苦想,反复尝试。发现,这里没有使用任何python的数据结构。python作为nb的科学计算语言,没有发挥其长处。pandas、numpy、scipy等,没有用上。

三、解决思路

  在梳理了for循环中的计算逻辑后,发现可以和pandas Dataframe的一些方法对应上。于是,就一顿利用pandas的groupby、apply、sort_values等操作,测试。最后,总的运行时间是2个小时左右,优化了到了30%的运行时间。
  其实,上面这个例子具有一定的个案性。但是,我想表达的意思是善用、巧用数据结构的力量。尤其是在现在大数据环境下,数据只会越来越多。比如,我的例子还可以进行numpy的矩阵乘法优化,估计会更节省时间。

发布了25 篇原创文章 · 获赞 14 · 访问量 1156

猜你喜欢

转载自blog.csdn.net/A_pinkpig/article/details/104533210