코딩 테스트 문제를 풀다 보면 sort/sorted를 사용해야 하는 경우가 왕왕 있다.
단순히 sort/sorted가 정렬 기능만 사용할 줄 알았고, 심화적으로 사용할 줄은 몰랐다.
그래서 이번 계기로 sort/sorted 함수에 대해 자세히 포스팅할 것이다.
(순전히 내가 겪거나, 알고 있는 지식이므로 더 자세한 내용은 직접 찾아보면 좋겠습니다!)
1. sort
- 원본은 변경시켜 정렬하며, "리스트.sort()" 형태로 사용한다.
- default 정렬기준은 문자열은 알파벳, 가나다 순이고 숫자는 오름차순이다.
2. sorted
- 원본의 변경시키지 않으면 결과를 반환한다. "sorted()" 형태로 사용한다. () 안에는 iterable 자료형을 넣는다.
- 정렬기준은 sort와 동일하다.
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)이라서 다른 정렬 알고리즘에 비교하여 좋은 성능을 낸다고 한다.
'python' 카테고리의 다른 글
[python] 파일 다루기/데이터 구조 다루기/리스트 컴프리헨션/튜플 정렬 (0) | 2022.01.29 |
---|---|
[python] str.startswith / str.endswith (0) | 2022.01.28 |
[python] deque (0) | 2021.10.24 |
[python] 집합 자료형 set (0) | 2021.10.16 |
[python] list.index() 란? (0) | 2021.10.16 |
댓글