对反转对象列表进行排序

Sort a list of reversed objects

我正在寻找一种不使用 lameda 函数进行反向 lexicographical 排序的方法,并在使用 reversed:

时注意到一些奇怪的事情
>>> tuples = [
...    (1, 2, 3),
...    (2, 3, 1),
...    (3, 1, 2),
... ]
>>> sorted(tuples, key=reversed)
[(3, 1, 2), (2, 3, 1), (1, 2, 3)]  # wrong
>>> sorted(tuples, key=reversed)
[(2, 3, 1), (1, 2, 3), (3, 1, 2)]  # also wrong
>>> sorted(tuples, key=reversed)
[(2, 3, 1), (3, 1, 2), (1, 2, 3)]  # heyyy, third time lucky!

python 如何对 reversed 个实例的列表进行排序?

它按 reversed 个对象的内存位置排序:

>>> x = reversed((1,2))
>>> y = reversed((2,1))
>>> sorted([x,y])
[<reversed at 0x7fffe84045d0>, <reversed at 0x7fffe84eb210>]
>>> sorted([y,x])
[<reversed at 0x7fffe84045d0>, <reversed at 0x7fffe84eb210>]

结果可能会在后续运行中发生变化,因为每次都会分配新的 reversed 对象。

但是,它是 CPython implementation detail 并且在语言参考中不能保证。