在python列表中交换元素

发布于 2021-01-29 16:42:39

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

但是,为什么代码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会先评估右侧,然后再将其分配给左侧的名称?

关注者
0
被浏览
46
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    Python将结果 从左到右 存储在多个目标中,并按该顺序执行分配目标表达式。

    因此,您的第二个版本基本上可以归结为:

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

    请注意,更改 后将*list.index(max(list))执行,这就是您刚刚存储最大值的地方。 *list[0]

    这在
    Assignment语句

    文档中记录

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

    从那里开始,好像每个目标都是一个目标,因此以下文档从左到右适用于每个目标:

    将对象分配给单个目标的定义如下。

    […]

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

    如果您更改分配顺序,则代码将起作用:

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

    因为现在list[list.index(max(list))]分配给 first



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看