这个结构有什么作用?

时间:2016-08-23 05:43:43

标签: python data-structures

示例

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]

这句话特别是在做什么?

6 个答案:

答案 0 :(得分:1)

成语

>>> a, b = b, a

在一个步骤中交换ab中的值,以便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两个值,zerocur处的值,然后解包tuple并将值分配给cur处的索引和{ {1}};通过反转分配给它的索引,它会交换值。

请注意,通过重新调整zero方法的key参数,让Python在C层完成工作,可以大大简化代码(尽管可能以运行速度稍慢为代价):

sort

由于Python的TimSort算法是稳定的,因此在将零移动到结尾时保留所有非零值的顺序。

答案 4 :(得分:0)

这是Python的元组打包和解包功能

它在功能上与

相同
temp = nums[cur]
nums[cur] = nums[zero]
nums[zero] = temp

但对计算机更有效,对程序员更具可读性。

进一步阅读:https://stackoverflow.com/a/14836456/5399734

答案 5 :(得分:0)

首先评估右边的两个值,然后将它们替换为左边的匹配槽。所以基本上:

a, b = b, a

就像:

c = b
d = a
a = c
b = d

在不创建其他变量的情况下交换值或对其执行某些操作特别有用。