python排序列表与tie-breaker

ssj*_*don 1 python sorting list sublist

使用打破平局对列表进行排序的最pythonic方法是什么?

我可以按子列表长度排序(从最长到最短):

>>> l = [['c'], ['a', 'b'], ['b', 'c'], ['a', 'b', 'c']]

>>> list(reversed(sorted(l, key=len)))
[['a', 'b', 'c'], ['b', 'c'], ['a', 'b'], ['c']]
Run Code Online (Sandbox Code Playgroud)

但是我希望在长度相等时保持顺序,所以我想要的输出是:

[['a', 'b', 'c'], ['a', 'b'], ['b', 'c'], ['c']]
Run Code Online (Sandbox Code Playgroud)

vau*_*tah 5

Timsort(Python的内置排序算法)是稳定的,这意味着它保持元素的原始顺序具有相同的键.但是,您使用该reversed功能撤消了原始顺序.

如果要反转结果列表保留比较相等的元素的原始顺序,请使用reverse=True:

In [3]: sorted(l, key=len, reverse=True)
Out[3]: [['a', 'b', 'c'], ['a', 'b'], ['b', 'c'], ['c']]
Run Code Online (Sandbox Code Playgroud)