[Python] 정렬 우선순위 설정하기 (다중리스트, 튜플)
이 글을 참고했다.
다중리스트 혹은 튜플에서 정렬 우선순위를 설정하는 방법을 알아보자.
lst = [(10, 30), (3, 15), (3, 10), (1, 5)]
위와 같은 리스트가 주어질 때 1순위 정렬기준은 x[0]
, 2순위 정렬기준은 x[1]
으로 설정하고 싶다고 가정하자.
정렬 기준(오름차순/내림차순)이 같은 경우
x[0]
을 기준으로 ‘오름차순’ 정렬, x[0]
이 같으면 x[1]
기준으로 ‘오름차순’ 정렬을 하고 싶다면 아래와 같이 적용하면 된다.
lst.sort(key=lambda x:(x[0], x[1]))
print(lst) # [(1, 5), (3, 10), (3, 15), (10, 30)]
만약 x[0]
을 기준으로 ‘내림차순’ 정렬, x[0]
이 같으면 x[1]
기준으로 ‘내림차순’ 정렬을 하고 싶다면 아래와 같이 적용하면 될 것이다.
lst.sort(key=lambda x:(x[0], x[1]), reverse=True)
print(lst) # [(10, 30), (3, 15), (3, 10), (1, 5)]
위 예제에서는 lst.sort()
를 사용했지만 리스트 자체를 변경하고 싶지 않은 경우 sort(lst, key=...)
를 사용해도 무방하다.
정렬 기준(오름차순/내림차순)이 다른 경우
하지만 만약 x[0]
을 기준으로 ‘오름차순’ 정렬, x[0]
이 같으면 x[1]
기준으로는 ‘내림차순’ 정렬을 하고 싶다면 어떻게 해야할까?
이 경우에는 ‘하위’ 우선순위부터 ‘먼저’ 정렬을 하면 된다.
(정렬 안정성이 있기 때문에 한번 정렬 된 것은 그 순서를 유지하고 있다.)
lst.sort(key=lambda x:x[1], reverse=True) # 하위 우선순위 먼저 !!
lst.sort(key=lambda x:x[0])
print(lst) # [(1, 5), (3, 15), (3, 10), (10, 30)]
💛 개인 공부 기록용 블로그입니다. 👻