想象一下,我们有一个数字列表a
,其中所有数字都不同,我们想要交换最大的一个和最小的一个。问题是,为什么Python中的这段代码:
a[a.index(min(a))], a[a.index(max(a))] = a[a.index(max(a))], a[a.index(min(a))]
无效?
答案 0 :(得分:7)
为什么会失败?我们以a = [1, 2, 3, 4]
为例。
首先,评估右侧:
a[a.index(max(a))], a[a.index(min(a))] => 4, 1
这当然与
相同max(a), min(a) => 4, 1
接下来,分配发生了from left to right:
首先,将a[a.index(min(a))]
设置为4会使列表[4, 2, 3, 4]
成为最小值。
然后,将a[a.index(max(a))]
设置为1会再次生成列表[1, 2, 3, 4]
,因为最大值已经写在前面,所以现在找到它的位置以及写入1的位置。
答案 1 :(得分:4)
最好先获得max和min的索引:
i_min, i_max = a.index(min(a)), a.index(max(a))
a[i_min], a[i_max] = a[i_max], a[i_min]
其他方式结果可能无法预测)