擅长:python、mysql、java
<p>就地复制,使用p跟踪原始值。将交换的原始值复制到P。如果P中的索引值已被迭代,则使用P,否则使用A中的值(以检查是否已被覆盖)</p>
<pre><code>A = [5, 6, 7, 8]
P = [1, 3 ,2, 0]
for i,p in enumerate(P):
P[i]=A[i]
A[i]=P[p] if p < i else A[p]
</code></pre>
<p>如果您需要就地复制值而不创建列表(在时间和空间上都稍微高效一些),那么直接将值复制到p会更简单,并将p用作新的a,但出于某种原因,您似乎希望在a上就地复制值,并且只将p用作临时存储</p>
<p>列表理解也更容易实现,并且在不改变列表的情况下创建副本</p>
<p>效率上的差异其实并不重要。即使您在资源受限的情况下处理非常大的列表,也不可能有明显的区别,更不用说成为瓶颈了</p>