백준 1931번 문제를 해결하면서 리스트를 다중 정렬이 필요했다.

 

그러면 다중 정렬이란 무엇일까?? 다음과 같은 리스트가 있다고 하자.

list1 = [(5, 4), (4, 4), (4, 3), (5, 2), (3, 1), (3, 2), (2, 5), (2, 1)]

원소가 투플인 해당 리스트를 다음과 같은 조건으로 정렬하고자 한다.

투플의 첫 번째 원소에 대해서 오름차순

② 첫 번째 원소의 값이 같으면 두 번째 원소에 대해서 오름차순

 

먼저 sort()의 key에서 투플의 첫 번째 원소만을 조건으로 주면 결과는 다음과 같다.

list1.sort(key=lambda x: x[0])
# [(2, 5), (2, 1), (3, 1), (3, 2), (4, 4), (4, 3), (5, 4), (5, 2)]

첫 번째 원소에 대해서 정렬은 되지만, 두 번째 원소에 대해서는 정렬이 되지 않고 입력한 순서대로 출력이 된다.

 

따라서 조건에 맞게 정렬하기 위해서는 다음과 같이 작성하면 된다.

list1.sort(key=lambda x: (x[0], x[1]))
# [(2, 1), (2, 5), (3, 1), (3, 2), (4, 3), (4, 4), (5, 2), (5, 4)]

lambda함수에서 정렬 조건에 맞에 투플 형식으로 주면 된다. 우선순위가 높은 조건을 먼저 인자로 준다.

 

추가적인 정렬예제들

 투플의 첫 번째 원소에 대해서 오름차순

② 첫 번째 원소의 값이 같으면 두 번째 원소에 대해서 내림차순

list1.sort(key=lambda x: (x[0], -x[1]))
# [(2, 5), (2, 1), (3, 2), (3, 1), (4, 4), (4, 3), (5, 4), (5, 2)]

 

 투플의 두 번째 원소에 대해서 오름차순

번째 원소의 값이 같으면 첫 번째 원소에 대해서 오름차순

list1.sort(key=lambda x: (x[1], x[0]))
# [(2, 1), (3, 1), (3, 2), (5, 2), (4, 3), (4, 4), (5, 4), (2, 5)]

 

'개발 > Python' 카테고리의 다른 글

[Python] 딕셔너리(Dict) 정렬하기  (0) 2021.01.27

+ Recent posts