python 3个变量的并行赋值
python parallel assignment of 3 variables
我的问题来自一个流行的编码测试。
给定一条链 defined as follows:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
如果我们想还原链,例如:
输入:1->2->3->4->5->NULL
输出:5->4->3->2->1->NULL
可以这样解决this:
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
cur, pre = head, None
while cur:
tmp = cur.next
cur.next = pre
pre = cur
cur = tmp
return pre
但是有一个a more compact way,我真的听不懂:
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
cur, pre = head, None
while cur:
cur.next, pre, cur = pre, cur, cur.next
return pre
因为如果我将并行分配行更改为
pre, cur, cur.next = cur, cur.next, pre
它不会再正常工作了。
我想知道 python 的并行分配是如何工作的,尤其是在所有 3 个变量都是动态的情况下。
当你编写并行作业时
x, y, z = a, b, c
相当于
temp = (a, b, c)
x = temp[0]
y = temp[1]
z = temp[2]
所以在失败的版本中,它等同于
temp = (cur, cur.next, pre)
pre = temp[0]
cur = temp[1]
cur.next = temp[2]
将此版本与工作版本进行比较:
cur.next = temp[0]
pre = temp[1]
cur = temp[2]
不同之处在于,在您的版本中,您在 cur
到 cur.next
之后分配给 cur.next
,所以您'实际上是分配给原来的 cur.next.next
.
我的问题来自一个流行的编码测试。
给定一条链 defined as follows:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
如果我们想还原链,例如:
输入:1->2->3->4->5->NULL
输出:5->4->3->2->1->NULL
可以这样解决this:
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
cur, pre = head, None
while cur:
tmp = cur.next
cur.next = pre
pre = cur
cur = tmp
return pre
但是有一个a more compact way,我真的听不懂:
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
cur, pre = head, None
while cur:
cur.next, pre, cur = pre, cur, cur.next
return pre
因为如果我将并行分配行更改为
pre, cur, cur.next = cur, cur.next, pre
它不会再正常工作了。
我想知道 python 的并行分配是如何工作的,尤其是在所有 3 个变量都是动态的情况下。
当你编写并行作业时
x, y, z = a, b, c
相当于
temp = (a, b, c)
x = temp[0]
y = temp[1]
z = temp[2]
所以在失败的版本中,它等同于
temp = (cur, cur.next, pre)
pre = temp[0]
cur = temp[1]
cur.next = temp[2]
将此版本与工作版本进行比较:
cur.next = temp[0]
pre = temp[1]
cur = temp[2]
不同之处在于,在您的版本中,您在 cur
到 cur.next
之后分配给 cur.next
,所以您'实际上是分配给原来的 cur.next.next
.