python - 为什么我不能在一行中交换列表中的两个项目?

标签 python list swap

为什么这不起作用(不交换值):

lol = ["test","test2"]
lol[lol.index("test")], lol[lol.index("test2")] = lol[lol.index("test2")], lol[lol.index("test")]

但这有效(交换值):

i1 = lol.index("test")
i2 = lol.index("test2")
lol[i1], lol[i2] = lol[i2], lol[i1]

最佳答案

第一个示例不起作用的原因是因为您多次调用 .index(),每次之后,列表中的值都在变化,因此在代码不代表元素的实际位置。第二个示例有效,因为您已将第一个索引存储在两个变量中,并在交换中使用它们。

第一个例子的概述:

lol[lol.index("test")], lol[lol.index("test2")] = lol[lol.index("test2")], lol[lol.index("test")] 

第一部分:lol[lol.index("test")] 存储 0

第二部分:lol[lol.index("test2")] 存储 1

第三部分:lol[lol.index("test2")] 仍然存储1

这是有趣的时候。例子的第四部分,lol[lol.index("test")],找到test的索引,然而,test是从代码的第三段分配1。因此,lol[lol.index("test")]1,而不是0。因此,lol[lol.index("test2")] 仍然存储 1

关于python - 为什么我不能在一行中交换列表中的两个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46324157/

相关文章:

java - 数组的反向输出未按预期工作

list - 从 clojure 中的函数返回列表

jquery - 是否有 native jQuery 函数来切换元素?

python - 如果条件匹配,如何添加值,python

python - Pandas:如何从 CSV 读取字节和非字节列并解码字节列?

list - 简单 Prolog 谓词上的 "Out of stack"错误

java - 在该类的方法体内实例化泛型类

c++ - 为什么共享指针赋值是 'swap' ?

python - Office 365 API - 创建带有附件的事件

python - 这两个Python代码有什么区别?为什么结果不同?