交换python中列表中的元素

Par*_*rth 4 python swap list

我有一个列表,我需要将列表中的第一个元素与列表中的最大元素交换.

但是为什么代码1工作而代码2没有:

代码1:

a = list.index(max(list))
list[0], list[a] = list[a], list[0]
Run Code Online (Sandbox Code Playgroud)

代码2:

list[0], list[list.index(max(list))] = list[list.index(max(list))], list[0]
Run Code Online (Sandbox Code Playgroud)

我认为Python会先将其评估为右侧,然后再将其分配给左侧的名称?

Mar*_*ers 5

Python将结果从左到右存储在多个目标中,按顺序执行赋值目标表达式.

所以你的第二个版本基本上归结为:

temp = list[list.index(max(list))],list[0]
list[0] = temp[0]
list[list.index(max(list))] = temp[1]
Run Code Online (Sandbox Code Playgroud)

请注意,在更改list.index(max(list))执行,这就是您存储最大值的位置. list[0]

这在分配报表文档中有记录:

  • 如果目标列表是以逗号分隔的目标列表:对象必须是具有与目标列表中的目标相同数量的项目的可迭代项,并且项目将从左到右分配给相应的目标.

从那时开始,就好像每个目标都是单个目标一样,因此后面的文档从左到右应用于每个目标:

如下递归地定义对象到单个目标的分配.

[...]

  • 如果目标是订阅:将评估引用中的主表达式.它应该产生可变序列对象(例如列表)或映射对象(例如字典).接下来,评估下标表达式.

如果您更改了代码的分配顺序:

list[list.index(max(list))], list[0] = list[0], list[list.index(max(list))]
Run Code Online (Sandbox Code Playgroud)

因为现在list[list.index(max(list))]被分配到第一个.