我发现后者效率更高(快了几个数量级)。这有什么原因吗?
block = data[y * block_length:y * (block_length + 1)] # Slow
与
block = [data[y * block_length + z] for z in xrange(block_length)] # Fast
编辑:使用Numpy(这可能是原因),请参阅http://pastebin.com/88KkWd79上的代码运行时间为python test.py a
或time python test.py b
,当功率变大时,函数b开始花费更长的时间
第一个应该快得多。但是,请注意这两个列表是不相等的。第一个有y
项,而第二个有block_length
项。如果y
非常大(例如,因为你将一个非常长的列表分成相对较小的块),这可能会导致运行时间的差异。
可能你的意思是:
block = data[y * block_length : (y + 1) * block_length]