8

各要素が次のようなタプルである Python のリストがあります。

(attr1, attr2, attr3)

最大の を持っているタプルを見つけたいのですattr2が、 を持っていattr3 >= 100ます。

これに対するpythonicアプローチは何ですか?

4

2 に答える 2

16

keymax への引数をフィルタリングして使用する必要があります。

from operator import itemgetter

max(filter(lambda a: a[2] >= 100, yourlist), key=itemgetter(1))

フィルターは、ジェネレーター式として表現することもできます。

max((t for t in yourlist if t[2] >= 100), key=itemgetter(1))

デモ:

>>> yourlist = [(1, 2, 300), (2, 3, 400), (3, 6, 50)]
>>> max((t for t in yourlist if t[2] >= 100), key=itemgetter(1))
(2, 3, 400)
>>> max(filter(lambda a: a[2] >= 100, yourlist), key=itemgetter(1))
(2, 3, 400)

フィルタリングするため、最大値を選択するための空のリストになってしまうのは簡単なのでValueError、コールスタックを伝播するためにその例外が必要でない限り、 s をキャッチする必要があるかもしれません:

try:
    return max(filter(lambda a: a[2] >= 100, yourlist), key=itemgetter(1))
except ValueError:
    # Return a default
    return (0, 0, 0)
于 2012-09-17T12:56:27.903 に答える
0

最大値のインデックスも必要な場合は、次のようにします。

 max(filter(lambda a: a[1][2] >= 100, enumerate(yourlist)), key=lambda x:x[1][1])` 

少し読みにくくなることは認めざるを得ませんが。

于 2020-04-23T16:37:38.707 に答える