属性

2009-05-16 8 views
0
私はPythonでオブジェクトのリストをソートしようとしています

によってオブジェクトのリストを並べ替え、しかし、このコードは動作しません:属性

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() 

これの出力は次のようになります。

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

でした誰か私にこれを解決する良い方法を教えてください? sort()関数がNoneを返すのはなぜですか?

+0

この質問は重複しています:http://stackoverflow.com/questions/403421/how-to-sort-a-list-of-objects-in-python-based-on-an-attribute-of- the-objects 名声を持つ誰かがこれをそのようにマークしてください。 – galarant

答えて

5

mylist.sort()は何も返さず、リストを所定の場所にソートします。正しい結果を確認するには、

mylist.sort() 
print mylist 

に変更してください。

http://docs.python.org/library/stdtypes.html#mutable-sequence-typesノート7.

ソート()を参照してください 大きなリストを並べ替えたり反転するとき()メソッドは、宇宙の経済 のための場所でリストを変更 逆。 が副作用で動作することを知らせるために、 はソートされたリストまたは逆のリストを返しません。

+0

-1:ドキュメントからの引用はありません。 –

+0

ああ、愚かな私。どうもありがとう。 – gustavlarson

2

任意の反復可能文字のソートされたコピーを返す関数については、sortedを参照してください。

+0

IOW、 'print sorted(mylist)' –

+0

'ソート済み'は元のリストを変更しません。場合によっては元のリストを変更したい場合もあれば、そうでない場合もあります。 – Rory

+0

私は知っています。そのため、ソートされたリストへの参照ではなく、ソートされたコピーが返されます。 –