提问人:gkaz 提问时间:1/17/2021 更新时间:1/17/2021 访问量:1681
使用一行多赋值在列表中交换元素
Element swapping in list using one line multiple assignment
问:
我正在尝试交换列表中的 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, 2, 1, 4, 5]
但我希望:
arr = [1, 2, 3, 4, 5]
tmp = arr[arr[0]]
arr[arr[0]] = arr[0]
arr[0] = tmp
print(arr)
[2, 1, 3, 4, 5]
谁能解释这种行为?
答:
0赞
Daniel Hao
1/17/2021
#1
你可以试试这个,看看它对你有什么帮助:
arr = [1, 2, 3, 4, 5]
for i in range(0,len(arr)-1, 2):
arr[i], arr[i+1] = arr[i+1], arr[i]
print(arr)
输出:
[2, 1, 4, 3, 5]
2赞
Alireza Rahimi
1/17/2021
#2
您应该首先更改 value 然后更改 value 。
所以换个地方就能解决问题。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, 3, 4, 5]
0赞
CHINNIKALYAN
1/17/2021
#3
arr = [1, 2, 3, 4, 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, 1, 3, 4, 5]
只要颠倒顺序就可以了,现在工作正常了
0赞
ghostshelltaken
1/17/2021
#4
Python 根据位置交换值。当您看到 的操作码时,您将看到我将调用一个名为 的方法。你可以在这里找到它的参考,在这里找到cpython实现。a, b = b, a
ROT_TWO()
让我们使用前两个索引 0 和 1。
首先,它会将 0 推入堆栈,然后推入 1。现在它弹出了 location(index) 1,在该位置,我们在数组中有值 2。它交换。
现在它弹出 location(index) 0。现在我们在位置 0 处有值 2。这就是为什么我们在索引 0 和 1 处有值 2 的原因。
希望这能回答我们的问题。
下一个:如何简化这些多重分配?
评论