我需要交换不同数字列表中的最大值和最小值。像这样:
示例输入
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/