回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>对于这个简单的代码片段,我很难理解幕后发生了什么:</p>
<pre><code>def changeArray(arr):
for i in range(len(arr)):
arr[i], arr[arr[i] - 1] = arr[arr[i] - 1], arr[i]
print(arr)
return(arr)
</code></pre>
<p>该代码假定数组的元素是从1到n的整数。
当输入为[1,3,4,2]时,给定代码的输出为:</p>
<pre><code>[1, 3, 4, 2]
[1, 4, 4, 3]
[1, 4, 4, 3]
[1, 4, 4, 3]
Out[8]: [1, 4, 4, 3]
</code></pre>
<p>当我期望它打印并返回这个时:</p>
<pre><code>[1, 3, 4, 2]
[1, 4, 3, 2]
[1, 4, 3, 2]
[1, 2, 3, 4]
Out[8]: [1, 2, 3, 4]
</code></pre>
<p>当代码只交换元素时,为什么值会发生变化?你知道吗</p>
<hr/>
<p>编辑:</p>
<p>原来,更改交换顺序可以解决问题:</p>
<pre><code>def changeArray(arr):
for i in range(len(arr)):
arr[arr[i]-1], arr[i] = arr[i], arr[arr[i]-1]
print(arr)
return(arr)
</code></pre>
<p>这将产生以下输出:</p>
<pre><code>[1, 3, 4, 2]
[1, 4, 3, 2]
[1, 4, 3, 2]
[1, 2, 3, 4]
Out[8]: [1, 2, 3, 4]
</code></pre>
<p>改变顺序是如何按预期进行交换的,而相反的顺序则完全是另一回事?你知道吗</p>