【发布时间】:2020-08-13 22:49:32
【问题描述】:
假设我有一个巨大的列表(比如一千万个元素),我想反转除最后一个之外的所有元素。最简单的方法是:
a[0:-1] = a[-1::-1]
但问题是我认为创建了一个临时列表。如果是这样,如何避免呢?
[编辑] 对于更一般的情况,请考虑反转列表的中间部分:
【问题讨论】:
-
创建了一个临时列表。为避免这种情况,请使用手动执行此操作的循环。您是否有某些原因试图避免创建中间列表?
-
@LeoArad
a[1::-1]创建一个列表。即使它没有,作为一个实现细节,我很确定切片分配无论如何都会创建一个列表 -
@LeoArad 我相信 OP 指的是
a[1::-1],它确实创建了一个新列表 -
@LeoArad 是的,没有人对此提出异议。无论如何都会创建一个新的中间列表
-
临时对象比解释器开销便宜很多。你为避免临时做的任何事情都会引入过多的解释器开销,不值得。 (你还搞砸了切片端点。)