リストのリストがlist = [(1,2,5), (2,8,7),(3,6,9)]
あり、3列目の最大数を見つけたいので、試しました:
zipped = zip(*list)
print max(zipped[2])
しかし、それは最大の数を示していません。理由と解決策を知っている人はいますか?
すべての新しい Python で動作します:
>>> li = [(1,2,5), (2,8,7),(3,6,9)]
>>> max(l[2] for l in li)
9
テキストがある場合:
>>> li = [('1','2','5'), ('2','8','7'),('3','6','9')]
>>> max(int(l[2]) for l in li)
9
ソースがイテレータ/ジェネレータであっても機能します。これは、zip がイテレータを返す Py3.3 にあります。
>>> gli=(e for e in li)
>>> max(int(l[2]) for l in gli)
9
>>> max(int(l[2]) for l in zip(*li))
9
python2.7で動作します。
>>> l = [(1,2,5),(2,8,7),(3,6,9)]
>>> zip(*l)
[(1, 2, 3), (2, 8, 6), (5, 7, 9)]
>>> max(zip(*l)[2])
9
別のオプション:
max(l,key=lambda x:x[2])[2]
または、必要に応じてitemgetter
:
from operator import itemgetter
max(l,key=itemgetter(2))[2]
zip
これはおそらくメモリの点でより効率的であり、.を返さなくなった python3.x でも動作しますlist
。
ここで重要なのは、最大の完全なタプル (3 番目の要素によって決定される最大) を取得し、必要に応じてそこから正しい要素を引き出すことができることです。