使用比较功能排序功能

Yan*_*ick 6 python sorting python-3.x

我想对2D列表进行排序,其中每个"行"的大小为2,例如

[[2,5],[2,3],[10,11]]
Run Code Online (Sandbox Code Playgroud)

这些行实际上代表了范围,所以它总是[a,b],其中a <= b

我想用这种方式对它进行排序,列表的每个元素都是2个列表,我有(按优先顺序):[a1,b1]与[a2,b2]相比较

 1. If a1 < a2 do not permute
 2. If a1 > a2 permute
 3. If a1 == a2 then permute if (b1 - a1) > (b2 - a2)
Run Code Online (Sandbox Code Playgroud)

我觉得愚蠢的是python不再允许比较功能.相反,它使用一个关键功能.因为我将比较基于两个参数,即'a'的数值(占优势),然后是范围的长度(b-a),我无法制作有效的密钥.

我该怎么办呢?我的意思是,没有调用两次排序()或其他东西,在我看来,这很简单.

它甚至可能吗?或者有什么我看不到的东西?

谢谢!

Joh*_*ooy 5

虽然有些情况无法处理key.这不是其中的一个.解决方案是使关键函数返回atuple

>>> L = [[2, 5], [2, 3], [10, 11]]
>>> sorted(L, key=lambda x:(x[0], x[1] - x[0]))
[[2, 3], [2, 5], [10, 11]]
Run Code Online (Sandbox Code Playgroud)