当前位置: 首页 > 面试题库 >

在python列表中交换元素

伍耀
2023-03-14
问题内容

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

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


问题答案:

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



 类似资料:
  • 问题内容: 我在这样的列表中有一个元组/列表: python(在非常低的cpu / ram机器上运行)交换值的最快方法是什么… 当前使用: 有更好或更快速的方法吗??? 问题答案: 您可以使用地图: 或列表理解: 列表理解是首选方法,并且在需要lambda时,它比map快得多。但是请注意,列表理解具有严格的评估标准,也就是说,如果担心内存消耗,它将在绑定到变量后立即对其进行评估。 生成器 :

  • 问题内容: 有没有比在Python中交换两个列表元素更快的方法了 还是我不得不求助于Cython或Weave之类? 问题答案: 看起来Python编译器使用此构造优化了临时元组: 码: 输出: 两个加载,一个和两个保存,而三个加载和三个保存。您不太可能找到更快的机制。

  • 问题内容: 我有一个这样的元组列表: 而且我需要将所有元组的交集合并起来。 那就是相交的元组是迭代地联合的。 我试图将元组转换为集合,然后采用交集,但没有用。任何想法? 问题答案: 这是网络问题,使用

  • 我正在尝试将列表转换为元组。 Google上的大多数解决方案提供以下代码: 但是,当我运行代码时,它会产生一条错误消息: TypeError:“tuple”对象不可调用 我如何解决这个问题?

  • 问题内容: 我有一堆看起来像这样的列表: 我想交换元素如下: 列表的大小可能有所不同,但是它们将始终包含偶数个元素。 我对Python相当陌生,目前正在这样做: 我知道这不是真正的Pythonic,而是想使用更高效的工具。也许列表理解? 问题答案: 无需复杂的逻辑,只需通过切片和步骤重新排列列表即可: TLDR; 编辑带说明 我相信大多数观众已经熟悉列表切片和多重分配。如果您不这样做,我会尽力解释

  • 本文向大家介绍python 实现交换两个列表元素的位置示例,包括了python 实现交换两个列表元素的位置示例的使用技巧和注意事项,需要的朋友参考一下 在IDLE 中验证如下: python是可以一次赋值两个变量的!谢谢! 以上这篇python 实现交换两个列表元素的位置示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 这些数字是,这正是我所期望的。 我完全搞不懂这两个案子的情况。有人能解释清楚吗?

  • 问题内容: 我必须搜索一个列表,然后用一个元素替换所有出现的元素。到目前为止,我在代码方面的尝试使我无处可寻,做到这一点的最佳方法是什么? 例如,假设我的列表具有以下整数 我需要将所有出现的数字1替换为值10,所以我需要的输出是 因此,我的目标是将数字1的所有实例替换为数字10。 问题答案: