Max在两个条件的列表(Max in a list with two conditions)

2019-07-31 16:02发布

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

(attr1, attr2, attr3)

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

什么是Python的方法呢?

Answer 1:

你有两个过滤器,并使用一个key参数最大:

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)


文章来源: Max in a list with two conditions
标签: python list max