백준 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 |
---|