Python 交换问题
Python Swap Issue
只是想知道当我 运行
时会发生什么
nums[i], nums[nums[i] - 1] = nums[nums[i] - 1], nums[i]
在 python3.
我知道它在我喜欢的时候有效
x = nums[i] - 1
nums[i], nums[x] = nums[x], nums[i]
但是还是不知道到底发生了什么。
Python 规则非常具体。
求a = b = c = ... = z
的时候,先求右手边,然后this赋值,顺序是a
然后b
,然后c
,.. .
为普通元组赋值时,赋值的长度必须与被赋值的元组的长度相同。第一个值分配给元组的第一部分,然后第二个值分配给元组的第二部分,依此类推。
在这两条规则之间,上面的代码发生了什么就很清楚了。这些步骤按顺序发生:
- 计算右侧。
- 结果元组的第一部分分配给左侧的第一部分
- 结果元组的第二部分分配给左侧的第二部分。
- 要正确交换元素,请使用此
nums=[4,8,3,7,5]
print('before',nums)
i=3
nums[i], nums[i - 1] = nums[i - 1], nums[i]
print('after',nums)
before [4, 8, 3, 7, 5]
after [4, 8, 7, 3, 5]
- 要了解您的代码为何不起作用,请参阅以下代码
代码将从最右向左执行
nums=[4,8,7,3,5]
i=3
>nums[i], nums[nums[i] - 1] = nums[nums[i] - 1], nums[i]
>nums[i], nums[nums[i] - 1] = nums[3 - 1], 3
>nums[i], nums[nums[i] - 1] = nums[2], 3
>nums[i], nums[nums[i] - 1] = 7, 3
#first element
>nums[i] ----> 7
>nums[3] ----> 7
>nums=[4,8,7,7,5]
#second element
>nums[nums[i] - 1] ---> 3
>nums[nums[3] - 1] ---> 3 #nums[3] became 7
>nums[7 - 1] ---> 3
>nums[6] ---> 3 #index out of range
只是想知道当我 运行
时会发生什么nums[i], nums[nums[i] - 1] = nums[nums[i] - 1], nums[i]
在 python3.
我知道它在我喜欢的时候有效
x = nums[i] - 1
nums[i], nums[x] = nums[x], nums[i]
但是还是不知道到底发生了什么。
Python 规则非常具体。
求a = b = c = ... = z
的时候,先求右手边,然后this赋值,顺序是a
然后b
,然后c
,.. .
为普通元组赋值时,赋值的长度必须与被赋值的元组的长度相同。第一个值分配给元组的第一部分,然后第二个值分配给元组的第二部分,依此类推。
在这两条规则之间,上面的代码发生了什么就很清楚了。这些步骤按顺序发生:
- 计算右侧。
- 结果元组的第一部分分配给左侧的第一部分
- 结果元组的第二部分分配给左侧的第二部分。
- 要正确交换元素,请使用此
nums=[4,8,3,7,5]
print('before',nums)
i=3
nums[i], nums[i - 1] = nums[i - 1], nums[i]
print('after',nums)
before [4, 8, 3, 7, 5]
after [4, 8, 7, 3, 5]
- 要了解您的代码为何不起作用,请参阅以下代码
代码将从最右向左执行
nums=[4,8,7,3,5]
i=3
>nums[i], nums[nums[i] - 1] = nums[nums[i] - 1], nums[i]
>nums[i], nums[nums[i] - 1] = nums[3 - 1], 3
>nums[i], nums[nums[i] - 1] = nums[2], 3
>nums[i], nums[nums[i] - 1] = 7, 3
#first element
>nums[i] ----> 7
>nums[3] ----> 7
>nums=[4,8,7,7,5]
#second element
>nums[nums[i] - 1] ---> 3
>nums[nums[3] - 1] ---> 3 #nums[3] became 7
>nums[7 - 1] ---> 3
>nums[6] ---> 3 #index out of range