python - 交换列表中的最大值和最小值

标签 python python-3.x list swap

我需要交换不同数字列表中的最大值和最小值。像这样:

示例输入

3 4 5 2 1

示例输出

3 4 1 2 5

我认为使用它最有意义:

a = [3, 4, 5, 2, 1]
a[a.index(max(a))], a[a.index(min(a))] = min(a), max(a)

但是,它似乎适用于一些不同数字的列表,但不适用于其他列表(包括给定的示例)。我不知道为什么。谁能看到错误?

最佳答案

在多重赋值中,Python 从左到右计算所有右侧部分,然后将它们从左到右一一分配给左侧部分(详见 the language reference)。所以:

a = [3, 4, 5, 2, 1]
a[a.index(max(a))], a[a.index(min(a))] = min(a), max(a)

a = [3, 4, 5, 2, 1]
a[a.index(max(a))], a[a.index(min(a))] = 1, max(a)

a = [3, 4, 5, 2, 1]
a[a.index(max(a))], a[a.index(min(a))] = 1, 5

a = [3, 4, 5, 2, 1]
a[a.index(5)], a[a.index(min(a))] = 1, 5

a = [3, 4, 5, 2, 1]
a[2], a[a.index(min(a))] = 1, 5

a = [3, 4, 1, 2, 1]
a[a.index(min(a))] = 5

a = [3, 4, 1, 2, 1]
a[a.index(1)] = 5

a = [3, 4, 1, 2, 1]
a[2] = 5
# ^ uh oh

a = [3, 4, 5, 2, 1]

如果最小值最大值之前这很好,因为我们总是替换第一次出现的最小值,结果证明是原始值。

要修复它,只需在进行交换之前分别计算索引。

关于python - 交换列表中的最大值和最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49687402/

相关文章:

python - 连接列表中的字符串

python - Pycharm 设置 Mysql 数据库驱动

python - 如何使用 Python 下载 YouTube 视频?

python - 为列表条目提供索引

python - 如何将列表列表追加到一个列表中

jquery - 隐藏/显示定义列表中的 DD 元素

python - Excel 行到句子 Python

python - 反向传播时深度学习的问题。 (Python)

python - 在 Django 中运行迁移时出现 mysqlclient 错误

python - 如何预测火车系统中孤立节点与其非相邻节点之间给定边距离的图网络?