더북(TheBook)

같은 접근 방법을 사용하면 여러 다른 타입의 정렬 기준을 여러분이 원하는 방향으로 서로 조합할 수 있다. 다만 최종적으로 리스트에서 얻어내고 싶은 정렬 기준 우선순위의 역순으로 정렬을 수행해야 한다는 사실을 꼭 기억해야 한다. 위 예제에서는 weight에 의해 내림차순으로 정렬하고 그 후 name에 의해 오름차순으로 정렬된 리스트를 원했으므로, 먼저 name을 사용해 오름차순으로 정렬하고 그 후 weight를 사용해 내림차순으로 정렬해야 한다.

그렇지만 key 함수를 사용해 tuple을 반환하게 하고 여기에 단항 부호 반전 연산을 활용하는 접근 방식이 코드가 더 적고 읽기도 쉽다. 꼭 필요할 때만 sort를 여러 번 호출하는 방법을 사용하는 것을 권장한다.

기억해야 할 내용

• 리스트 타입에 들어 있는 sort 메서드를 사용하면 원소 타입이 문자열, 정수, 튜플 등과 같은 내장 타입인 경우 자연스러운 순서로 리스트의 원소를 정렬할 수 있다.

• 원소 타입에 특별 메서드를 통해 자연스러운 순서가 정의돼 있지 않으면 sort 메서드를 쓸 수 없다. 하지만 원소 타입에 순서 특별 메서드를 정의하는 경우는 드물다.

sort 메서드의 key 파라미터를 사용하면 리스트의 각 원소 대신 비교에 사용할 객체를 반환하는 도우미 함수를 제공할 수 있다.

key 함수에서 튜플을 반환하면 여러 정렬 기준을 하나로 엮을 수 있다. 단항 부호 반전 연산자를 사용하면 부호를 바꿀 수 있는 타입이 정렬 기준인 경우 정렬 순서를 반대로 바꿀 수 있다.

• 부호를 바꿀 수 없는 타입의 경우 여러 정렬 기준을 조합하려면 각 정렬 기준마다 reverse 값으로 정렬 순서를 지정하면서 sort 메서드를 여러 번 사용해야 한다. 이때 정렬 기준의 우선순위가 점점 높아지는 순서로 sort를 호출해야 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.