【问题标题】:Simultaneous vs. one-by-one value assignment in PythonPython 中的同时赋值与一对一赋值
【发布时间】:2020-05-10 09:44:17
【问题描述】:

我正在尝试将代码中的同时赋值重写为一个一个赋值,但我不知道它是如何工作的。

原代码如下(反转一个链表):


class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        rev=None
        while head:
            head.next,rev,head=rev,head,head.next
        return rev

我尝试将while循环的内部重写为

            tmp=head
            head.next=rev
            rev=tmp
            head=head.next

它不起作用。当我输入链表 1->2->3 时,它输出 1,而不是 3->2->1。 我尝试了各种其他方法,但没有成功。

能指出我做错了什么吗? 非常感谢您的评论。 谢谢。

【问题讨论】:

标签: python python-3.x linked-list


【解决方案1】:

同时赋值是一种快速交换值并将值分配给变量的方法,而无需使用tmp 之类的东西。例如,

a, b = b, a

在功能上等同于

tmp = a
a = b
b = tmp

在您提供的示例中,解决方案使用此逻辑为每个变量分配新值:

head.next, rev, head = rev, head, head.next

如果你想使用临时变量来存储中间值,你应该这样做

tmp = head.next
head.next = rev
rev = head
head = tmp

由于head 中途更改,您的代码无法按预期工作。 head.next = rev 会改变head.next 的内容,也就是说它也会影响tmp 的值,其中存储了head。因此,您应该存储head.next 而不是head,最后将tmp 本身分配给head

【讨论】:

    猜你喜欢
    • 2020-08-10
    • 2013-04-30
    • 1970-01-01
    • 2014-04-12
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多