si deve sia il filtro e utilizzare un argomento key
a max:
from operator import itemgetter
max(filter(lambda a: a[2] >= 100, yourlist), key=itemgetter(1))
Il filtro può anche essere espresso come un generatore di espressione:
max((t for t in yourlist if t[2] >= 100), key=itemgetter(1))
Demo:
>>> 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)
Nota che poiché si filtra, è facile finire con una lista vuota da cui prelevare il massimo, quindi potrebbe essere necessario prendere ValueError
s a meno che non è necessario che un'eccezione per propagare lo stack di chiamate:
try:
return max(filter(lambda a: a[2] >= 100, yourlist), key=itemgetter(1))
except ValueError:
# Return a default
return (0, 0, 0)
fonte
2012-09-17 12:56:27
e che cosa ci si può aspettare di uscita se tutti i valori hanno 'attr3 <100'? 'max()' solleverà un ValueError se riceve una sequenza vuota. –