2016-11-01 5 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) 

나는 sorted_dos의 주문, DO1을 DO3을 DO2되고 싶어요.

DataObject을 변경하지 않고 awesome_sort()을 우아하고 버그없이 구현하려면 어떻게해야합니까?

답변

1

내장 된 sorted 기능을 사용해보십시오. 목록을 정렬하는 방법을 알려주는 key을 전달할 수 있습니다.

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

이렇게하면 배열의 첫 번째 값에 따라 오름차순으로 정렬됩니다. 첫 번째 요소가 동일 할 경우 두 번째 요소를 검사합니다.

+0

예상대로 배열을 정렬합니까? 필자는 배열에 대한 최소한의 작업 예제를 만들지 못했습니다. 나는'a1 = array ([1.0, 5.0, 0.0]);을 시도했다. a2 = 배열 ​​([1.0, 8.0, 9.0]); a3 = 배열 ​​([1.0, 5.0, 9.0]); a = [a1, a2, a3]; sorted (a)' – Make42

+0

방금 ​​작은 수정을했습니다. 'x.loc' 주위에'튜플 (tuple) '을 싸야합니다. – James

+0

또한 객체의 위치를보고 싶다면'def __repr __ (self)를 추가 할 수 있습니다 : return " ". format (* self.loc)' – James