1
class ListNode:
    def __init__(self,val,next=None) -> None:
        self.val=val
        self.next=next

n3=ListNode(3,n4)
n2=ListNode(2,n3)
n1=ListNode(1,n2)

n2,n2.next,n1=n2.next,n1,n2

如果它同时发生,n2.next 应该是 n1,但结果显示 n2.next=n3。这是否意味着在应用 n2=n2.next 之后执行 n2.next=n1 ?我做错了什么?

4

2 回答 2

2

在 python 赋值语句中,总是在将值分配给左侧之前评估右侧。右侧每个变量的结果,即 n2.next,n1,n2 的计算结果是 n2.next 为 3,n1 为 1,n2 为 2。然后从左到右进行赋值。

n2.next 首先分配给 n2,然后将 n1 分配给 n2.next,然后将 n2 分配给 n1。所以你是对的,它是按顺序进行的,而不是同时进行的。

于 2021-07-29T09:17:34.160 回答
0

Python 从左到右计算表达式。请注意,在评估分配时,右侧先于左侧评估。 文档

分配发生如下:

初始值:

n3 = ListNode(3,n4)
n2 = ListNode(2,n3)
n1 = ListNode(1,n2)
n2, n2.next, n1 = n2.next, n1, n2

右手边评价:

 A. n2.next = n3 = (3, n4)
 B. n1 = (1, n2)
 C. n2 = (2, n3)

从左到右赋值

 1. Now n2 is n2.next which is n3. So n2 = (3, n4) {From A}
 2. n2.next is n1 i.e, n2.next = n1. So n2 = (3, n1) {From B}
 3. n1 is n2. So n1 = (2, n3) {From C}

所以最终值是:

n1 = (2, n3)
n2 = (3, n1)
于 2021-07-29T10:03:10.637 回答