Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有两个条件的列表中的Max_Python_List_Max - Fatal编程技术网

Python 具有两个条件的列表中的Max

Python 具有两个条件的列表中的Max,python,list,max,Python,List,Max,我有一个Python列表,其中每个元素都是一个元组,如下所示: (attr1, attr2, attr3) 我想找到最大的attr2,但attr3>=100的元组 什么是pythonic方法?您必须过滤并使用键参数来最大化: from operator import itemgetter max(filter(lambda a: a[2] >= 100, yourlist), key=itemgetter(1)) 过滤器也可以表示为生成器表达式: max((t for t in yo

我有一个Python列表,其中每个元素都是一个元组,如下所示:

(attr1, attr2, attr3)
我想找到最大的
attr2
,但
attr3>=100
的元组


什么是pythonic方法?

您必须过滤并使用
参数来最大化:

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))
演示:

请注意,由于您进行了筛选,很容易得到一个空列表来从中选取最大值,因此您可能需要捕获
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])` 

尽管我不得不承认它有点不可读。

如果所有值都有
attr3<100
,您希望得到什么输出
max()
如果接收到空序列,将引发ValueError。@wim:
filter()
非常适合
max()
函数模式。这是一个品味问题。如果生成器/筛选器返回空序列,您还需要处理由
max()
引发的
ValueError
。@ShawnChin:这不是特定于生成器或筛选器使用的
max([])
也会引发该异常。我知道这一点。我只是指出OP要求中的边缘情况,并建议一种方法,使您的解决方案更健壮。@ShawnChin:是的,过滤器使它更可能遇到这种情况,我也将其添加到了我的答案中。
 max(filter(lambda a: a[1][2] >= 100, enumerate(yourlist)), key=lambda x:x[1][1])`