錯了還不知道原因的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個,簡單清晰,一(我)把(想)梭(裝)哈(逼)。

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