3

リストのリストがlist = [(1,2,5), (2,8,7),(3,6,9)]あり、3列目の最大数を見つけたいので、試しました:

zipped = zip(*list)
print max(zipped[2])

しかし、それは最大の数を示していません。理由と解決策を知っている人はいますか?

4

2 に答える 2

12

すべての新しい 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
于 2013-02-14T21:26:27.450 に答える
4

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 番目の要素によって決定される最大) を取得し、必要に応じてそこから正しい要素を引き出すことができることです。

于 2013-02-14T21:20:34.910 に答える