意外的Python算术行为

时间:2016-04-08 15:07:02

标签: python performance encoding decoding

我正在使用Python中的霍夫曼编码器/解码器,并且在我的代码中遇到了一些意外的(至少对我而言)行为。编码文件很好,解码文件时会出现问题。以下是相关代码:

with open(cfile,"rb") as f

对于所有文件大小(测试大小为1.2MB,679KB和87KB),第一个for b in com调用运行得非常快,但是显着减慢代码的部分是decode循环。我已经做了一些时间,老实说,我不知道发生了什么。

我已经为每个文件计时了整个87KB 1.5 sec 679KB 6.0 sec 1.2MB 384.7 sec 函数,如下所示:

cnode = 2*cnode + b + 1

首先,我甚至不知道如何分配这种复杂性。接下来,我已经计时了解有问题的循环,并得到行if cnode in dkey需要2e-6秒,而 SELECT * from first f join f_s fs on f.first_id=fs.first_id join second s on fs.second_id=s.second_id; 行需要0.0秒(根据time.clock( )在OSX上)。所以看起来这个算法显着减慢了我的程序......?我觉得这没有意义。

我实际上根本不知道发生了什么,任何帮助都会非常受欢迎

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法,但事后我仍然感到困惑。我通过将dec""更改为[],然后将dec += dkey[cnode]行更改为dec.append(dkey[cnode])来解决了该问题。这导致了以下时间:

87KB    0.11 sec
679KB   0.21 sec
1.2MB   1.01 sec

正如您所看到的,这极大地缩短了时间,因此在这方面,这是成功的。但是,我仍然感到困惑的是为什么python的字符串连接似乎是这里的问题。