对反转对象列表排序

2024-10-04 11:36:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种不使用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实例列表进行排序


Tags: 方法key函数time排序alsosortedthird
1条回答
网友
1楼 · 发布于 2024-10-04 11:36:20

它是按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,在语言引用中不能保证

相关问题 更多 >