示例
num = [0,3,5,3,0,0,9,8]
输出应为
[3,5,3,9,8,0,0,0]
Python中的解决方案是
def moveZeroes(self, nums):
zero, cur = -1, 0
while cur < len(nums):
if nums[cur] != 0:
# update zero index when current is not zero
zero += 1
nums[cur], nums[zero] = nums[zero], nums[cur]
cur += 1
我的问题是我已经看到类似的声明了很多
nums[cur], nums[zero] = nums[zero], nums[cur]
这句话特别是在做什么?
答案 0 :(得分:1)
成语
>>> a, b = b, a
在一个步骤中交换a
和b
中的值,以便a
现在指向b
过去指向的值,反之亦然:< / p>
>>> a, b = 1, 2
>>> a
1
>>> b
2
>>> a, b = b, a
>>> a
2
>>> b
1
从技术上讲,右侧创建一个一次性元组,左侧是一个元组拆包任务。
nums[cur], nums[zero] = nums[zero], nums[cur]
然后意味着&#34;交换索引zero
和索引cur
的元素。
答案 1 :(得分:0)
此代码nums[cur], nums[zero] = nums[zero], nums[cur]
交换 nums
数组中的两个值。这和你写的一样:
temp = nums[cur]
nums[cur] = nums[zero]
nums[zero] = temp
当您在=
赋值运算符的两边使用逗号时,Python基本上会立即进行所有赋值,因此您不需要temp
变量。
答案 2 :(得分:0)
它正在交换价值观。
a, b = b, a
现在a
的值为b
,而b
的值为a
答案 3 :(得分:0)
它是一种变量交换,Python风格。它构造了tuple
两个值,zero
和cur
处的值,然后解包tuple
并将值分配给cur
处的索引和{ {1}};通过反转分配给它的索引,它会交换值。
请注意,通过重新调整zero
方法的key
参数,让Python在C层完成工作,可以大大简化代码(尽管可能以运行速度稍慢为代价):
sort
由于Python的TimSort算法是稳定的,因此在将零移动到结尾时保留所有非零值的顺序。
答案 4 :(得分:0)
这是Python的元组打包和解包功能。
它在功能上与
相同temp = nums[cur]
nums[cur] = nums[zero]
nums[zero] = temp
但对计算机更有效,对程序员更具可读性。
答案 5 :(得分:0)
首先评估右边的两个值,然后将它们替换为左边的匹配槽。所以基本上:
a, b = b, a
就像:
c = b
d = a
a = c
b = d
在不创建其他变量的情况下交换值或对其执行某些操作特别有用。