Python:为什么交换最大和最小数字的代码不起作用?

时间:2015-08-11 13:24:53

标签: python list

想象一下,我们有一个数字列表a,其中所有数字都不同,我们想要交换最大的一个和最小的一个。问题是,为什么Python中的这段代码:

a[a.index(min(a))], a[a.index(max(a))] = a[a.index(max(a))], a[a.index(min(a))]

无效?

2 个答案:

答案 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] 

其他方式结果可能无法预测)