【发布时间】:2021-03-13 01:55:45
【问题描述】:
我的问题来自一个流行的编码测试。
给定一个链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个变量都是动态的情况下。
【问题讨论】:
-
每件事都首先在右边进行评估,它本质上创建了一个长度为 3 的元组(尽管作为 CPython 实现细节/微优化,编译器实际上避免在 2 和可能 3 的情况下生成元组)。然后那个元组'项目从左到右分配到左侧的目标列表
标签: python python-3.x variable-assignment