对反转对象列表进行排序
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 并且在语言参考中不能保证。
我正在寻找一种不使用 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 并且在语言参考中不能保证。