본문 바로가기
python

[python] sort/sorted 함수 알아보기

by 천뿌니 2021. 10. 20.
728x90

코딩 테스트 문제를 풀다 보면 sort/sorted를 사용해야 하는 경우가 왕왕 있다.

단순히 sort/sorted가 정렬 기능만 사용할 줄 알았고, 심화적으로 사용할 줄은 몰랐다.

그래서 이번 계기로 sort/sorted 함수에 대해 자세히 포스팅할 것이다.

(순전히 내가 겪거나, 알고 있는 지식이므로 더 자세한 내용은 직접 찾아보면 좋겠습니다!)

 

1. sort

- 원본은 변경시켜 정렬하며, "리스트.sort()" 형태로 사용한다.

- default 정렬기준은 문자열은 알파벳, 가나다 순이고 숫자는 오름차순이다.

sort 함수 예제

2. sorted

- 원본의 변경시키지 않으면 결과를 반환한다. "sorted()" 형태로 사용한다. () 안에는 iterable 자료형을 넣는다.

- 정렬기준은 sort와 동일하다.

sorted 함수 예제

 

3. reverse, key(포스팅 한 이유)

- sort, sorted 둘 다 revese, key 파라미터를 가지고 있다. 

- revese는 간단하다. sort의 경우 sort(reverse = True) / sorted의 경우 sorted(정렬할 자료형, reverse=True) 하면 된다.

- key는 여러 가지 많은데 필자는 lambda 식을 아는 것이 가장 중요하다고 생각한다. (lambda는 응용이 가능하다!)

- 예를 들어 리스트안에 x, y좌표가 여러 개 있는 리스트를 생각해보자. 여기서 x 좌표로 정렬하려면 어떻게 해야 할까?

p_list.sort() or p_list.sort(key = lambda x : x[0])  ( 0 )

이렇게 표현할 수 있다. 굳이 lambda를 쓸 필요가 없다.

- 하지만 y 좌표로 정렬하려면 어떻게 해야 할까?

p_list.sort(reverse=True)  ( X )

이렇게 쓰면 x좌표로 내림차순 정렬이 되어버린다. 이럴 때 lambda를 사용하는 것이다.

p_list.sort(key = lambda x : x[1])    ( 0 )

결국 정렬 기준을 정하는 것인데, x[1] 즉 y좌표를 기준으로 삼는 것이다.

- 그러면 x좌표 정렬 후 y좌표를 정렬하는 것은 어떻게 할까?

p_list.sort(key = lambda x : (x[0], x[1])   ( 0 )

이렇게 하면 해결이 된다!!

 

* 여담으로 sort 함수 시간 복잡도가 O(nlogn)이라서 다른 정렬 알고리즘에 비교하여 좋은 성능을 낸다고 한다.

댓글