具有两个条件的列表中的最大值

时间:2012-09-17 12:55:06

标签: python list max

我在Python中有一个列表,其中每个元素都是这样的元组:

(attr1, attr2, attr3)

我想找到具有最大attr2但具有attr3 >= 100的元组。

什么是pythonic方法呢?

2 个答案:

答案 0 :(得分:13)

您必须同时过滤并使用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)

请注意,由于您进行了过滤,因此很容易得到一个空列表来选择最大值,因此您可能需要捕获ValueError,除非您需要该异常来传播调用堆栈:

try:
    return max(filter(lambda a: a[2] >= 100, yourlist), key=itemgetter(1))
except ValueError:
    # Return a default
    return (0, 0, 0)

答案 1 :(得分:0)

如果您还想要最大值的索引,则可以执行以下操作:

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

尽管我不得不承认它有点难以理解。