一、交互列表元素时,需要注意的坑。
例如: array=[4,5,9,8,10,8,4,0,3,4] 最大的值与第一个元素交换,最小的值与最后一个元素交换
# -*- coding: UTF-8 -*-
array=[4,5,9,8,10,8,4,0,3,4]
maxa = max(array) #列表最大值
mina = min(array) #列表最小值
len_array = len(array) - 1
max_index = array.index(maxa) #列表最大值的位置
if max_index != 0: #最大值不在第一个位置
array[0], array[max_index] = maxa, array[0] #列表最大值和第一个值互换 #第一种写法
#array[0],array[array.index(max(array))]=maxa,array[0] #第二种写法(错误)
min_index = array.index(mina) #取列表最小值
if min_index != len_array: #最小值不在最后一个位置
array[-1], array[min_index] = mina, array[-1] #列表最小值和最后一个值互换
print array
错误原因:红色字体那种写法得不到正确结果,列表位置未更换。
表面看第一种写法和第二种写法等价,其实在整句语法中array值已经有变化了,再找的最大值索引位置已不同。
因为array[0]=maxa 之后array.index(max(array))再去找最大值的索引位置,找到的是交换最大值之后的array[0],再将原array[0]的值替换掉现在的array[0],结果又换回来了。找最大值的索引位置要在任何替换操作之前。