python写算法太慢_程序运行太慢!:建议算法/实现优化

我有一个巨大的python列表。名单A的长度约为9万。每个内部列表包含大约700个(datetime.date,string)元组。现在,我正在分析这些数据。我要做的是在内部列表中取一个大小为x的窗口,其中-x = len(inner list) * (some fraction <= 1)并保存每个有序对(a,b),其中a出现在该窗口中的b之前(实际上内部列表是按时间排序的)。我将这个窗口移到最后一个元素,从一端一次添加一个元素,从另一端移除,这需要O(window-size)时间,因为我只考虑新的元组。我的代码:for i in xrange(window_size):

j = i+1;

while j

check_and_update(cur, my_list[i][1], my_list[j][1],log);

j=j+1

i=1;

while i<=len(my_list)-window_size:

j=i;

k=i+window_size-1;

while j

check_and_update(cur, my_list[j][1], my_list[k][1],log);

j+=1

i += 1

这里cur实际上是一个sqlite3数据库游标,my_list是一个包含元组的列表的列表,我为a中的所有列表迭代此代码,log是一个打开的日志文件。在方法check_and_update()中,我正在查找我的数据库以查找元组(如果存在的话),或者插入它,以及到目前为止它的出现总数。代码:

^{pr2}$

正如预期的那样,这个元组的数量是巨大的,而且我以前曾尝试过字典,它会很快消耗内存。所以,我求助于SQLite3,但是现在它太慢了。我试过索引,但没有帮助。可能我的程序花了很多时间查询和更新数据库。你对这个问题有什么优化的想法吗?可能会改变算法或一些不同的方法/工具。谢谢您!在

编辑:我在这里的目标是找出在窗口中出现的字符串元组的总数,这些元组按它们出现在不同的内部列表中的数量进行分组。我通过以下查询提取此信息:for i in range(1,size+1):

cur.execute('select * from Extra where count = ?',str(i))

#other stuff

例如(我忽略了日期条目,将它们写成'dt':My_list = [

[ ( dt,'user1') , (dt, 'user2'), (dt, 'user3') ]

[ ( dt,'user3') , (dt, 'user4')]

[ ( dt,'user2') , (dt, 'user3'), (dt,'user1') ]

]

如果我取分数=1,结果:only 1 occurrence in window: 5 (user 1-2,1-3,3-4,2-1,3-1)

only 2 occurrence in window: 2 (user 2-3)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值