我有一个元组列表,每个元组有 2 个整数:
a_list=[(20, 1), (16, 0), (21, 0), (20, 0), (24, 0), (25, 1)]
我正在寻找的是一种查找并返回具有最小第二项和最大第一项的元组的方法。在上面的列表中,它将是 tuple (24, 0)
。
您的示例对于以下工作方法来说是微不足道的
>>> a_list=[(20, 1), (16, 0), (21, 0), (20, 0), (24, 0), (25, 1)]
>>> max(a_list, key=lambda e:(-e[-1],e[0]))
(24, 0)
它假设这样一个事实
元组根据索引按字典顺序进行比较
见文档:
序列类型也支持比较。特别是,元组和列表通过比较相应的元素来按字典顺序进行比较。这意味着要比较相等,每个元素必须比较相等,并且两个序列必须是相同的类型并且具有相同的长度
数字的顺序随着符号的变化而反转
这有效:
>>> a_list = [(20, 1), (16, 0), (21, 0), (20, 0), (24, 0), (25, 1)]
>>> a = min(x[1] for x in a_list)
>>> max(b for b in a_list if b[1] == a)
(24, 0)
>>>
假设我的理解是正确的,那么这就是你需要做的。
求第二个最小值:
lowest = min(a_list, key=lambda t: t[1])[1]
然后找到所有将其作为第二个项目的项目
having_lowest = filter(lambda t: t[1] == lowest, a_list)
然后找到第一个数字最高的那个
having_max = max(having_lowest, key=lambda t: t[0])