2016-11-01 6 views
1

私はnumpyの配列であるフィールドを持つクラスを持っています。このクラスのインスタンスはリストにあります。上記の配列でリストをソートしたいと思います。これどうやってするの?numpy配列のオブジェクトフィールドでオブジェクトのリストをソートしますか?

簡体:

ここ
class DataObject: 
    def __init__(self, location): 
    self.loc = location 

do1 = DataObject(array([4.0, 5.0, 6.0])) 
do2 = DataObject(array([1.0, 2.0, 3.0])) 
do3 = DataObject(array([1.0, 8.0, 9.0])) 
dos = [do1, do2, do3] 

sorted_dos = awesome_sort(dos) 

私はDO3、DO1、sorted_dosで注文がDO2ことにしたいです。私は実装するにはどうすればよい

awesome_sort()エレガントでバグのないDataObjectを変更せずに?

答えて

1

ビルトインsorted機能を使用してみてください。リストをソートする方法を示すkeyを渡すことができます。

sorted(dos, key=lambda x: tuple(x.loc)) 

これは、配列の最初の値に基づいて昇順にソートされます。最初の要素が等しい場合、2番目の要素をチェックします。

+0

この種は私が期待するよう配列ウィル?私は配列で最小の実例を作ることはできませんでした。私は 'a1 = array([1.0、5.0、0.0]);を試しました。 a2 = array([1.0、8.0、9.0]); a3 = array([1.0、5.0、9.0]); a = [a1、a2、a3];ソート済み(a) ' – Make42

+0

私はちょっとした修正をしました。あなたは、あなたのオブジェクトの位置を確認したい場合は、 'デフ__repr __(自己)を追加することができ、また' x.loc' – James

+0

周り 'tuple'をラップする必要があります。return「<のDataObject LOC:{}、{}、{ }>」形式(* self.loc)は ' – James

関連する問題