Python 列表切片性能

Jac*_*cob 1 python performance list slice

我发现后者效率更高(速度快几个数量级)。这有什么原因吗?它是在 Python 2.7 中完成的。

block = data[y * block_length:y * (block_length + 1)] # Slow
Run Code Online (Sandbox Code Playgroud)

对比

block = [data[y * block_length + z] for z in xrange(block_length)] # Fast
Run Code Online (Sandbox Code Playgroud)

编辑:

使用 Numpy(这可能是原因),请参阅http://pastebin.com/88KkWd79 上的代码。 随着时间的推移运行它,python test.py a或者time python test.py b,随着功率变大,函数 b 开始花费更多、更长的时间。

tob*_*s_k 5

第一个应该快得多。但是,请注意,这两个列表并不等效。第一个有y条目,而第二个有block_length条目。Ify非常大(即,因为您将一个很长的列表拆分为相对较小的块),这可能是运行时间差异的原因。

可能你的意思是这样的:

block = data[y * block_length : (y + 1) * block_length]
Run Code Online (Sandbox Code Playgroud)