为什么这不起作用(不交换值):
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/