Hey Tech
[파이썬] 내장 함수를 활용한 데이터 정렬하기! (sorted, sort 함수) 본문
오늘은 파이썬 내장 함수인 sorted()와 sort()를 활용한 데이터 정렬 방법에 대해 공유해 드립니다.
그럼 바로 시작하죠!
목차
1. 기본 정렬 라이브러리
2. sorted 함수
3. sort 함수
4. key 매개변수를 활용한 정렬 기준 설정
5. 정렬 알고리즘 문제 해결 전략
1. 기본 정렬 라이브러리
파이썬에는 sorted 및 sort라는 정렬 함수가 기본적으로 내장되어 있습니다.
이 함수들은 리스트, 딕셔너리, 집합 등의 데이터 타입을 입력값으로 받고, 데이터 타입에 상관없이 항상 리스트 형태로 데이터를 정렬한 결과를 반환하는 것이 특징입니다.
또한, 이 함수들은 최악의 경우에도 O(N*log N) 의 시간 복잡도를 보장한다는 것이 특징입니다.
그럼 sorted 함수와 sort 함수 각각에 대해 알아보겠습니다.
2. sorted 함수
sorted 함수는 정렬된 결괏값을 입력값에 바로 반영하지 않는 것이 특징입니다.
즉, sorted 함수를 활용해 입력값을 정렬한 결과는 얻을 수 있지만,
결괏값을 입력값에 따로 할당하지 않는 이상 입력값은 정렬되지 않습니다.
소스 코드
arr = [5, 8, 1, 2, 4, 9, 3, 7, 6]
print("sorted data: ", sorted(arr))
print("input data: ", arr)
출력 결과
sorted data: [1, 2, 3, 4, 5, 6, 7, 8, 9]
input data: [5, 8, 1, 2, 4, 9, 3, 7, 6]
위와 같이, sorted 함수 실행 후 반환되는 결과에서는 데이터가 정렬되어 있지만,
실제 입력 데이터는 정렬되지 않는 것을 확인하실 수 있습니다.
3. sort 함수
sorted 함수와 다르게, sort 함수는 따로 입력값에 정렬 함수 결괏값을 반환하지 않더라도 입력값을 정렬해 주는 함수입니다.
소스코드
arr = [5, 8, 1, 2, 4, 9, 3, 7, 6]
arr.sort()
print("input data: ", arr)
출력 결과
input data: [1, 2, 3, 4, 5, 6, 7, 8, 9]
위와 같이 sort 함수를 사용하면 입력값 자체가 정렬된 값으로 자동 변경된 것을 확인하실 수 있습니다.
사용 목적에 맞게 sorted 또는 sort 함수를 선택하여 활용하시길 바랍니다 :)
4. key 매개변수 활용한 정렬 기준 설정
sorted 및 sort 함수는 key 매개변수를 활용하여 정렬 기준을 설정할 수 있습니다.
key 매개변수에는 하나의 함수가 입력되어야 하며 해당 함수가 정렬의 기준이 됩니다.
예시를 통해 더 자세히 알아보겠습니다.
리스트의 원소가 튜플 형태로 구성되어 있을 때 각 데이터의 2번째 값을 기준으로 리스트를 정렬하는 코드를 작성해 보겠습니다.
함수 구성이 간단하기 때문에 lambda 구문을 활용해 간결하게 작성해 보겠습니다.
소스 코드
arr = [('Smith', 95), ('John', 78), ('Paul', 87), ('Jack', 61), ('Ryan', 97)]
res = sorted(arr, key = lambda x : x[1])
print(res)
출력 결과
[('Jack', 61), ('John', 78), ('Paul', 87), ('Smith', 95), ('Ryan', 97)]
위와 같이 리스트 내 튜플별 두 번째 데이터(숫자형 데이터)를 기준으로 리스트 내 원소가 정렬된 것을 확인하실 수 있습니다.
5. 정렬 알고리즘 문제 해결 전략
알고리즘 문제 풀이에 있어서 특별히 문제에서 요구사항이 없을 경우, 단순히 정렬이 필요한 상황에서는 기본 정렬 라이브러리를 활용하시는 것이 가장 좋습니다. 다만, 데이터의 범위가 한정되어 있고 더욱 빠르게 동작하도록 문제를 풀어야 한다면 계수 정렬 알고리즘을 활용하시는 것이 좋습니다. 이처럼 아래에 주어진 상황에 맞는 알고리즘 문제 풀이 전략을 정리해 보았습니다.
(1) 정렬 라이브러리 활용 문제
단순히 정렬 라이브러리에 대해 알고 있고 사용할 줄 아는지 묻기 위한 문제 유형입니다.
위에 설명해 드린 대로 정렬 함수 사용방법에 대해 기본적인 부분들에 대해 숙지하고 있으면 어렵지 않게 문제를 풀 수 있습니다.
(2) 정렬 알고리즘의 원리
선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬 등의 알고리즘 원리를 알아야 문제를 풀 수 있는 유형입니다.
알고리즘 시험에서 자주 등장하는 정렬 알고리즘 각각에 대한 원리를 숙지할 필요가 있습니다.
빈출 정렬 알고리즘에 대한 이론적인 설명을 이전 포스팅에 설명해 두었으니 관심 있으신 분들은 아래에 링크를 참고해 주세요.
(3) 시간 복잡도를 고려한 문제
퀵 정렬 알고리즘으로도 풀 수 없는 문제로, 계수 정렬 등의 다른 알고리즘을 활용해 더욱 빠르게 동작하는 알고리즘을 이용해야 하는 문제입니다. 기존 알고리즘들의 구조적인 개선을 통해 시간 복잡도를 줄여 나가야 하는 문제입니다.
마치며...
오늘은 파이썬 내장 정렬 라이브러리를 활용한 데이터 정렬 기법과 정렬 알고리즘 문제 해결 전략에 대해 알아보았습니다.
데이터를 다루는 일에 있어 데이터를 시각화하고 인사이트를 도출하는 데 있어 정렬은 매우 중요한 작업 중 하나입니다.
주어진 문제를 최적의 해법으로 해결하기 위해서는 다양한 정렬 알고리즘들의 원리도 이해하고 있어야 한다고 생각합니다.
참고할만한 포스팅
1. [알고리즘] 선택 정렬에 대해 알아보자! (+Python 구현)
2. [알고리즘] 삽입 정렬에 대해 알아보자! (+Python 구현)
3. [알고리즘] 퀵 정렬에 대해 알아보자! (+Python 구현)
4. [알고리즘] 계수 정렬에 대해 알아보자! (+Python 구현)
5. [파이썬] 내장 함수를 활용한 데이터 정렬하기! (sorted, sort 함수)
포스팅 내용에 오류가 있을 경우 댓글 남겨주시면 감사드리겠습니다.
그럼 오늘도 즐거운 하루 보내시길 바랍니다 :)
고맙습니다.
'SW 개발 > Python' 카테고리의 다른 글
[파이썬] 리스트 관련 함수: append, sort, reverse, insert, count, remove (0) | 2021.04.16 |
---|---|
[파이썬] 리스트 컴프리헨션(list comprehension)에 대해 알아보자! (0) | 2021.04.13 |
[파이썬] reduce 함수에 대해 알아보자(feat. lambda 표현식) (0) | 2021.02.26 |
[파이썬] filter 함수에 대해 알아보자(feat. lambda 표현식) (0) | 2021.02.25 |
[파이썬] map 함수에 대해 알아보자(Feat. lambda 표현식) (0) | 2021.02.24 |