2016-10-20 5 views
0

ich nach einem Weg suchen, eine Reverse- lexicographical Art ohne Verwendung einer Lameda Funktion und bemerkte etwas seltsam zu tun, wenn reversed mit:Sortieren einer Liste von Objekten rückgängig

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

Wie funktioniert Python sortieren eine Liste von reversed Instanzen?

Antwort

1

Es Bestellung von Speicherplatz der reversed Objekte:

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

Ergebnis auf nachfolgende Läufe ändern können, weil neue reversed Objekte jedes Mal zugeordnet sind.

Allerdings ist es ein CPython implementation detail und nicht in der Sprachreferenz garantiert.

Verwandte Themen