Python列表切片性能

1 投票
1 回答
2095 浏览
提问于 2025-04-17 22:49

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

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 atime python test.py b,随着数字变得更大,函数b的运行时间会变得非常非常长。

1 个回答

5

第一个方法应该会快很多。不过,要注意这两个列表并不相同。第一个列表有y个条目,而第二个列表有block_length个条目。如果y的值非常大(比如说你把一个很长的列表分成相对较小的块),这可能就是导致运行时间差异的原因。

你可能想要的是这个:

block = data[y * block_length : (y + 1) * block_length]

撰写回答