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函數用法的影響。
正確解法
首先給出兩種正確的解法:
- 轉化到一維數組求解
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]))
- 二維數組的情況下,一次擼完
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個,簡單清晰,一(我)把(想)梭(裝)哈(逼)。