list swap two elements failed when using the value as index again to avoid a local variable(再次使用该值作为索引以避免局部变量时,列表交换两个元素失败)
本文介绍了再次使用该值作为索引以避免局部变量时,列表交换两个元素失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
为什么l1
相同?l1[1]
和l1[2]
不会交换。
推荐答案
您可以更改顺序,它会起作用:
输出:
让我们首先看一下代码的反汇编:
在这种类型的赋值中,首先计算表达式的右侧(请参见Evaluation Order)。因此,首先,指令集(14 - 18)
加载l1[index]
,即1
,并将其推送到堆栈。然后,24-26
加载l1[l1[index]]
,即2
并将其推送到堆栈。因此,堆栈现在可以容纳[2,1]
。ROT_TWO
(30)交换堆栈并将其设置为[1, 2]
,这是我们需要的顺序。
现在,在32-36中,堆栈的顶部,即1
分配给l1[index]
,所以现在,l1[index] == 1
,即l1[1] = 1
。
然后38-42,堆栈中剩余的元素2
弹出为l1[l1[index]]
,但现在l1[index]
的值是1,所以您实际上是在做l1[1] = 1
。让我们来看看:
类似以下内容:
如果我们在我的解决方案中遵循相同的推理:
现在,您可以对l1 = [0, 1, 2]
遵循相同的逻辑。虽然不需要解释,但因为l1[index]
和l1[l1[index]]
是一样的:
因此,当您通过将列表元素作为索引传递来访问索引时,最好避免这种赋值。而是Explicit:
这篇关于再次使用该值作为索引以避免局部变量时,列表交换两个元素失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!