我在 Python 中有一个列表,其中每个元素都是这样的元组:
(attr1, attr2, attr3)
我想找到最大的元组attr2
,但有attr3 >= 100
。
对此的pythonic方法是什么?
您必须过滤并使用key
max 的参数:
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)
请注意,由于您进行过滤,很容易得到一个空列表来从中选择最大值,因此您可能需要 catch ValueError
s ,除非您需要该异常来传播调用堆栈:
try:
return max(filter(lambda a: a[2] >= 100, yourlist), key=itemgetter(1))
except ValueError:
# Return a default
return (0, 0, 0)
如果您还想要最大值的索引,您可以这样做:
max(filter(lambda a: a[1][2] >= 100, enumerate(yourlist)), key=lambda x:x[1][1])`
尽管我不得不承认它有点难以理解。