嵌套元组列表的高级排序标准

1 投票
2 回答
1692 浏览
提问于 2025-04-16 04:48

我有一个嵌套元组的列表,格式是这样的:

[(a, (b, c)), ...]

现在我想要找出一个元素,这个元素能让 a 的值最大,同时 bc 的值最小。比如在

[(7, (5, 1)), (7, (4, 1)), (6, (3, 1))]

中,最终的赢家应该是

(7, (4, 1))

任何帮助都非常感谢。

2 个回答

4

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在另一个地方使用这些数据。这个过程就像是把水从一个水桶倒到另一个水桶里。

有些时候,我们会遇到一些问题,比如数据格式不对,或者数据没有按我们想要的方式出现。这就像是水桶的形状不一样,导致水倒不进去。

为了避免这些问题,我们可以使用一些工具或者方法来确保数据能够顺利地从一个地方转移到另一个地方。这就像是使用一个漏斗来帮助我们把水倒得更顺利。

总之,处理数据时要注意格式和方法,这样才能让我们的程序运行得更顺利。

>>> max(lst, key=lambda x: (x[0], -x[1][0], -x[1][1]))
(7, (4, 1))
4

根据我的理解,你想要先按a降序排序,然后按b升序排序,最后按c排序。如果我理解没错,可以这样做:

>>> l=[(7, (5, 1)), (7, (4, 1)), (6, (3, 2)), (6, (3, 1))]
>>> sorted(l, key = lambda x: (-x[0], x[1]))
[(7, (4, 1)), (7, (5, 1)), (6, (3, 1)), (6, (3, 2))]

选出“赢家”就简单了,只需要选择第一个元素。

如果b和c需要相加,那在我的例子中就直接用sum(x[1]),而不是x[1]

我的关键函数返回一个元组,因为Python可以正确地对包含多个元素的元组进行排序:

>>> sorted([(1,2), (1,1), (1,-1), (0,5)])
[(0, 5), (1, -1), (1, 1), (1, 2)]

撰写回答