我有在Python列表中的列表,其中每個元素都是一個元組這樣的:Max在兩個條件
(attr1, attr2, attr3)
我想找到具有最大attr2
元組,但有attr3 >= 100
。
這是什麼pythonic方法?
我有在Python列表中的列表,其中每個元素都是一個元組這樣的:Max在兩個條件
(attr1, attr2, attr3)
我想找到具有最大attr2
元組,但有attr3 >= 100
。
這是什麼pythonic方法?
你有兩個過濾器,用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)
和你所期望的輸出,如果所有值都具有'attr3 <100'?如果接收到一個空序列,max()會引發一個ValueError。 –