交换python中列表中的元素

时间:2015-01-13 21:52:37

标签: python list swap

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

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

代码1:

a = list.index(max(list))
list[0], list[a] = list[a], list[0]

代码2:

list[0], list[list.index(max(list))] = list[list.index(max(list))], list[0]

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

1 个答案:

答案 0 :(得分:5)

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

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

temp = list[list.index(max(list))],list[0]
list[0] = temp[0]
list[list.index(max(list))] = temp[1]

请注意,{/ 1}}在 list.index(max(list))被更改后执行,并且您刚刚存储了最大值。

Assignment statements documenation

中记录了这一点
  
      
  • 如果目标列表是以逗号分隔的目标列表:该对象必须是一个可迭代的项目数与目标列表中的目标相同,并且项目已分配,从左到右,到相应的目标。
  •   

从那时起,就好像每个目标都是一个目标一样,所以后面的文档从左到右适用于每个目标:

  

将对象分配给单个目标按递归方式定义如下。

     

[...]

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

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

list[0]

因为现在list[list.index(max(list))], list[0] = list[0], list[list.index(max(list))] 已分配给第一个