a = []
a.append([-1,-1,-1])
a.append([-1, 2, -1])
a.append([-1, -1, 3])
というリストがあった際に、このリストの中の最大値3を得たい。つまり、
>>> max(list(map(lambda x: max(x), a)))
3
を行いたい。この際にmaxを入れ子にするとうまくいかない。
>>> max(max(a))
2
これは、max(a)をした際に[-1,-1,-1]
と[-1, 2, -1]
と[-1, -1, 3]
の比較が行われる。これは辞書順に比較され、
>>> [-1, 2, -1] > [-1, -1, 3]
True
>>> "acb" > "abz" # これと一緒
True
となるためである。
解法1: map
>>> max(list(map(lambda x: max(x), a)))
3
解法2: itertools.chainでflatなlistにする
>>> from itertools import chain
>>> list(chain(*a))
[-1, -1, -1, -1, 2, -1, -1, -1, 3]
>>> max(chain(*a))
3