Python 具有两个条件的列表中的Max
我有一个Python列表,其中每个元素都是一个元组,如下所示: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
(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])`