최대 1 분 소요

이 글을 참고했다.

다중리스트 혹은 튜플에서 정렬 우선순위를 설정하는 방법을 알아보자.

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)]


💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기

태그:

카테고리:

업데이트: