如何解决使用一行多重分配在列表中交换元素
我正在尝试交换列表中的 2 个元素。我想将索引 0 处的元素交换到索引 arr[0] 处的元素,所以基本上我想交换 arr[0] arr[arr[0]]。
我一直使用这种方法在索引 i 和 j 之间交换元素:
arr[i],arr[j] = arr[j],arr[i]
但在这种情况下它似乎不起作用。如果我这样做:
arr = [1,2,3,4,5]
arr[0],arr[arr[0]] = arr[arr[0]],arr[0]
print(arr)
[2,1,5]
但我希望:
arr = [1,5]
tmp = arr[arr[0]]
arr[arr[0]] = arr[0]
arr[0] = tmp
print(arr)
[2,5]
有人可以解释这种行为吗?
解决方法
您应该先更改 arr[arr[0]]
值,然后是 arr[0]
值。
所以换个地方就能解决问题。
arr = [1,2,3,4,5]
arr[arr[0]],arr[0] = arr[0],arr[arr[0]]
print(arr)
[2,1,5]
,
你可能。可以试试这个,看看它对你有帮助:
arr = [1,5]
for i in range(0,len(arr)-1,2):
arr[i],arr[i+1] = arr[i+1],arr[i]
print(arr)
输出:
[2,5]
,
arr = [1,5]
#the prob with your code is you are first assigning the vaue and changing it
arr[arr[0]],arr[0] =arr[0],arr[arr[0]]
print(arr)
[2,5]
只要颠倒顺序就可以了,现在工作正常
,Python 根据位置交换值。当您看到 a,b = b,a
的操作码时,您会看到我将调用一个名为 ROT_TWO()
的方法。您可以在 here 处找到相关参考,在 here 处找到 cpython 实现。
让我们使用前两个索引 0 和 1。
首先它会将 0 压入堆栈,然后压入 1。现在它弹出位置(索引)为 1 的位置,我们在数组中有值 2。它交换。
现在它弹出 location(index) 0。现在我们在位置 0 处有值 2。这就是为什么我们在索引 0 和 1 处有值 2。
希望这能回答我们的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。