打破Python中的联系

xxx*_*--- 3 python sorting

我有一个listtupleS,每个元组包含两个整数.我需要根据每个元组中整数的差异对列表进行排序(以相反的顺序排序),但是与较大的第一个整数断开连接.

因为[(5, 6), (4, 1), (6, 7)],我们应该得到[(4, 1), (6, 7), (5, 6)].

我的方式

我已经通过制作一个dictionary包含差异key的元素和元组来解决它value.但整件事情有点笨拙.

什么是更好的方法?

Mar*_*ers 17

使用key函数sorted()并返回元组; 值将按字典顺序排序:

sorted(yourlst, key=lambda t: (abs(t[0] - t[1])), t[0]), reverse=True)
Run Code Online (Sandbox Code Playgroud)

我在abs()这里使用来计算差异,无论两个整数中哪一个更大.

对于您的样本输入,密钥产生(1, 5),(3, 4)(1, 6); 以相反的顺序放置(1, 6)(对于(6, 7)元组)之前(1, 5)(对应(5, 6)).

演示:

>>> yourlst = [(5, 6), (4, 1), (6, 7)]
>>> sorted(yourlst, key=lambda t: (abs(t[0] - t[1]), t[0]), reverse=True)
[(4, 1), (6, 7), (5, 6)]
Run Code Online (Sandbox Code Playgroud)