一行与多行之间的分配有什么区别

时间:2018-12-17 06:02:56

标签: python python-3.x

我正在练习Swap Nodes in Pairs 中的一个问题。根据以下代码,是否有人将我的作业放在单独的行而不是一行中,为什么结果会有所不同?

class Solution:
    def swapPairs(self, head):
        prev, prev.next = self, head
        while prev.next and prev.next.next:
            a = prev.next
            b = a.next
            prev.next, b.next, a.next = b, a, b.next #what is difference if i seperate this line into following 3 statement?
            # prev.next = b
            # b.next = a
            # a.next = b.next
            prev = a
        return self.next

2 个答案:

答案 0 :(得分:1)

单行版本会在内存中创建一个临时元组,因此它是一种功能:

tmp1 = b
tmp2 = a
tmp3 = b.next
prev.next = tmp1
b.next = tmp2
a.next = tmp3

像在第二个示例中一样将其拆分时,最终要重新分配b.next,然后在分配之后读取它,因此其值已经改变了...

prev.next = b
b.next = a.next # <-- overwrites b.next
a.next = b.next # <-- reads that new value back

这就是为什么您通常不能通过执行以下操作交换两个变量的原因:

a=b # <-- overwrites a
b=a # <-- reads that value back

但是您可以(至少在Python中)可以做到:

a,b = b,a

答案 1 :(得分:0)

您从序列开始

encrypt

第一条语句正确地将中间对替换为

prev -> a -> b -> b.next

这是因为对整个右侧进行了评估,并将其打包到一个元组中,然后再对左侧进行任何赋值。

顺序分配结束设置

prev -> b -> a -> b.next

之所以会这样,是因为仅在分配prev -> b -> a -> a 之后才评估最后一个分配a.next = b.next。此时,b.next = ab.next

不使用临时变量的正确分配可以按以下顺序进行:

a