反转具有多个赋值的链表 - 并非所有赋值顺序都有效?

reverse a linked list with multiple assignment - not all assignment orders work?

提问人:ihadanny 提问时间:3/29/2020 最后编辑:ihadanny 更新时间:3/31/2020 访问量:209

问:

在多个赋值中反转 LinkedList 完全相同

但如果你尝试:

pre, node, node.next = node, node.next, pre

这是行不通的!(获取没有属性)NoneType

双:

pre, node.next, node = node, pre, node.next

node.next, pre, node = pre, node, node.next

工作。为什么顶部是错的?我以为多重作业使我无需考虑正确的顺序(或根本不考虑:)


编辑:

我将缩小范围:

if node:
   node.next, node = None, node.next
   #node, node.next = node.next, None # comment the previous line and uncomment this - boom!

我一直以为这些台词是等价的......

Python 算法 链表 多赋值

评论


答:

3赞 Alain T. 3/31/2020 #1

问题在于,其中一个接收变量执行基于所分配值的间接操作。多重赋值逻辑使您不必考虑右侧,因为它会自动为源值创建临时存储。但是,这不适用于作业的左侧。

因此,分配的顺序很重要,因为分配到 。nodenode.next

评论

0赞 ihadanny 3/31/2020
所以它使我免于用右脑思考,而不是用左脑思考?:)
0赞 Davis Herring 4/3/2020
有趣的是,即使该语言没有像 C 语言那样指向变量的指针,这也可以工作。每个赋值都可以预先计算为一种规范形式,或带有 and(视情况而定)或保存,就像右侧的值一样。不过,在重要的情况下,这可能更令人惊讶......xx.ax[k]xak
0赞 Alain T. 4/3/2020
我想这是一个设计决定。在某些用例中,不预先确定目标收件人可能是预期/要求的。在任何情况下,了解它的行为方式是获得所需结果的关键(例如,使用二传手分配属性)。