错了还不知道原因的max函数

python的内置max函数在寻找一维数组最大值的时候非常好用(min函数同理),但轻易照搬到二维数组就会摔个大跟头!

错误示例
给定个一维数组data=[1,2,3,4,5],找最大值:

max_value = max(data) #5

照搬到二维数组data=[[1,2,3,4,5],[0,1,2,3,6]],用下面作法:

max_value = max(max(data)) #5,并不是6

没有注意的情况下,是很轻易使用上面的写法来找二维数组的最大值,而这是错误的找法。我得承认一点,这可能是受到numpy.max函数用法的影响。

正确解法
首先给出两种正确的解法:

  1. 转化到一维数组求解
data=[[1,2,3,4,5],[0,1,2,3,6]]
max_value = max(data[0])
for i in range(1,len(data)):
	max_value = max(max_value,max(data[i]))
  1. 二维数组的情况下,一次撸完
max_value = max(map(max,data))

在解释为啥子第2种解法有用之前,先得说说错误示例中max(max(data))是错的,把它拆开看,max(data)其实是二维数组的元素(也就是一维数组)进行找最大,这在python中是可以的,它会默认按照从下标从小到大来比较两个一位数组的大小,[1,2,3,4,5]比[0,1,2,3,6]大,就是因为第一个元素1比0大,所以max(data)返回的是[1,2,3,4,5],外层的max便是作用在[1,2,3,4,5]上。正确解法里层是map(max,data)这是对二维数组中每个元素执行max函数,会得到[5,6],外层的max便是作用在[5,6],这个执行流程其实与第1种解法是一样的。

结语
两种正确的解法,我很中意第2个,简单清晰,一(我)把(想)梭(装)哈(逼)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章