2016-10-20 5 views
0

私は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インスタンス?

答えて

1

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>] 

結果は、その後の実行に変更することができます。

ただし、CPython implementation detailであり、言語リファレンスでは保証されていません。