Python自定义排序,按元组中两个元素的差值排序

4 投票
5 回答
2686 浏览
提问于 2025-04-17 10:57

我刚接触Python的自定义排序功能,但我相信以下内容是可以实现的。我有一个元组的列表,每个元组看起来像这样:

(some_int, some_int2, string)

我想按照某个整数和另一个整数之间的差值进行降序排序,也就是说,这两个整数之间差值最大的应该排在列表的最前面。可以放心地假设,第二个整数总是比第一个整数大。

谢谢大家。

5 个回答

1

如果你想提高自己的排序技能,可以看看这个Python排序指南,里面有很多例子。要根据两个元组元素之间的差异进行排序,你需要定义一个键函数,这个函数会计算出你想要的排序依据:

>>> sorted(iterable, key=lambda t: t[1] - t[0], reverse=True)
2

因为可以假设 some_int2 总是比 some_int 大,所以你只需要用它们之间的差值作为排序的依据:

l.sort(key=lambda t: t[1] - t[0])

举个例子:

>>> l = [(1, 1, 'a'), (2, 0, 'b')]
>>> l.sort(key=lambda t: t[1] - t[0])
>>> l
[(2, 0, 'b'), (1, 1, 'a')]
9
mylist.sort(key=lambda t: t[0] - t[1])

注意,我是以“错误”的顺序进行减法,这样计算出来的差值都会是负数,因此绝对值最大的会排在列表的前面。如果你想的话,也可以按照“正确”的顺序进行减法,然后设置 reverse=True

mylist.sort(key=lambda t: t[1] - t[0], reverse=True)

这样可能会更清楚,虽然会稍微多一些文字。

撰写回答