2009-05-16 17 views
0

ich eine Liste von Objekten in Python zu sortieren versuche, jedoch wird dieser Code nicht funktioniert:eine Liste von Objekten durch Attribut Sortierung

import datetime 

class Day: 
    def __init__(self, date, text): 
     self.date = date 
     self.text = text 

    def __cmp__(self, other): 
     return cmp(self.date, other.date) 

mylist = [Day(datetime.date(2009, 01, 02), "Jan 2"), Day(datetime.date(2009, 01, 01), "Jan 1")] 
print mylist 
print mylist.sort() 

Der Ausgang dieses ist:

[<__main__.Day instance at 0x519e0>, <__main__.Day instance at 0x51a08>] 
None 

Could jemand zeigt mir einen guten weg das zu lösen? Warum gibt die sort() Funktion None zurück?

+0

Diese Frage ist ein Duplikat von: http://stackoverflow.com/questions/403421/how-to-sort-a-list-of-objects-in-python-based-on-an-attribute-of- the-objects Jemand mit Reputation bitte dies als solches markieren. – galarant

Antwort

5

mylist.sort() gibt nichts zurück, es sortiert die Liste an Ort und Stelle. Ändern Sie ihn auf

mylist.sort() 
print mylist 

das richtige Ergebnis zu sehen.

Siehe http://docs.python.org/library/stdtypes.html#mutable-sequence-types Anmerkung 7.

Die sort() und rückwärts() Methoden Platz der Liste in Platz für Wirtschaft ändern, wenn das Sortieren oder eine große Liste rückgängig zu machen. Um Sie daran zu erinnern, dass sie Nebenwirkung betreiben, geben sie die sortierte oder umgekehrte Liste nicht zurück.

+0

-1: kein Zitat aus der Dokumentation. –

+0

Ah, Dumm ich. Danke vielmals. – gustavlarson

2

Siehe sorted für eine Funktion, die eine sortierte Kopie eines iterierbaren Objekts zurückgibt.

+0

IOW, 'print sortierte (Mylist)' –

+0

'sortiert' ändert nicht die ursprüngliche Liste. Manchmal möchten Sie die ursprüngliche Liste ändern, manchmal nicht. – Rory

+0

Ich weiß. Deshalb gibt es eine "sortierte Kopie" zurück, nicht "eine Referenz auf die sortierte Liste". –

Verwandte Themen