【问题标题】:Python List Slicing PerformancePython 列表切片性能
【发布时间】:2014-04-24 07:02:04
【问题描述】:

我发现后者效率更高(快几个数量级)。这有什么原因吗?它是在 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 开始花费更多、更长的时间。

【问题讨论】:

  • 你如何确认后者更快?
  • 使用命令时间。
  • @user2195592 你能给我们一些样本数据来运行测试吗?
  • My tests 显示相反。第一个代码块稍快。
  • 请注意,这些并不等同!第一个列表有 y 条目,第二个列表有 block_length 条目。你的意思是(y+1) * block_length

标签: python performance list slice


【解决方案1】:

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

可能你的意思是这样的:

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

【讨论】:

  • 哇。那很糟糕。 :P 是的,你是对的。这要快得多,这就是我的意思。
猜你喜欢
  • 1970-01-01
  • 2017-06-24
  • 2015-02-19
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多