从列表中的每个键获取具有最大值的元组

vas*_*cop 3 python algorithm tuples list

我有一个像这样的元组列表:

[(1, 0), (2, 1), (3, 1), (6, 2), (3, 2), (2, 3)]

我想保持具有相同第二个值的每个元组的最大第一个值的元组.例如,(2, 1)(3, 1)共享相同的第二个(键)值,所以我只想保留一个具有最大第一个值 - > (3, 1).最后我会得到这个:

[(1, 0), (3, 1), (6, 2), (2, 3)]

如果不是单行,我根本不介意,但我想知道一个有效的方法来解决这个问题......

ovg*_*vin 6

from operator import itemgetter
from itertools import groupby

[max(items) for key, items in groupby(L,key = itemgetter(1))]
Run Code Online (Sandbox Code Playgroud)

假设您的初始元组列表按键值排序.

groupby创建一个迭代器,它产生对象(0, <itertools._grouper object at 0x01321330>),其中第一个值是键值,第二个是另一个迭代器,它给所有具有该键的元组.

max(items) 只选择具有最大值的元组,并且因为该组的所有第二个值都相同(并且也是键),所以它为元组提供最大的第一个值.

列表推导用于根据这些函数的输出形成元组的输出列表.