사전순(lexicographical) 정렬이란?
단어를 사전순으로 정렬한다는 것은, 먼저 각 단어의 첫 번째 글자를 기준으로 순서를 배열하는 것을 의미합니다. 첫 글자가 같은 단어들이 있다면 그 그룹 안에서 두 번째 글자를 기준으로 다시 정렬하고, 이 과정을 계속 반복합니다. 마치 실제 사전(데이터 구조로서의 딕셔너리가 아닌 언어의 사전)에서 단어가 배열되는 방식과 동일합니다.
Python에서는 이러한 정렬을 위해 sort()와 sorted()라는 두 가지 함수를 제공합니다. 각각의 사용 방법과 어떤 상황에서 어떤 함수를 써야 하는지 살펴보겠습니다.
제자리(in-place) 정렬: sort() 메서드
기존 리스트 자체의 순서를 직접 변경하면서 정렬하고 싶다면 sort() 메서드를 사용하면 됩니다. sort()는 원본 리스트를 제자리에서 수정하며, 새로운 리스트를 반환하지 않습니다.
예제
my_arr = [
"hello",
"apple",
"actor",
"people",
"dog"
]
print(my_arr)
my_arr.sort()
print(my_arr)출력 결과
['hello', 'apple', 'actor', 'people', 'dog'] ['actor', 'apple', 'dog', 'hello', 'people']
실행 결과를 보면 원본 리스트인 my_arr 자체가 정렬된 순서로 변경된 것을 확인할 수 있습니다.
새 리스트 생성: sorted() 함수
원본 리스트는 그대로 유지한 채, 정렬된 새로운 리스트를 만들고 싶다면 sorted() 함수를 사용해야 합니다. sorted()는 원본을 변경하지 않고 정렬된 결과를 담은 새 인스턴스를 반환합니다.
예제
my_arr = [
"hello",
"apple",
"actor",
"people",
"dog"
]
print(my_arr)
# sorted() 메서드로 새로운 리스트 생성
new_arr = sorted(my_arr)
print(new_arr)
# 이번에는 my_arr가 제자리에서 변경되지 않고,
# 정렬된 새 인스턴스가 new_arr에 할당됩니다.
print(my_arr)출력 결과
['hello', 'apple', 'actor', 'people', 'dog'] ['actor', 'apple', 'dog', 'hello', 'people'] ['hello', 'apple', 'actor', 'people', 'dog']
위 출력에서 볼 수 있듯이, new_arr에는 정렬된 새 리스트가 담겨 있고, 원본 리스트 my_arr는 처음 상태 그대로 유지되었습니다.
정리
- sort(): 원본 리스트를 제자리에서 정렬하며, 반환값은 None입니다.
- sorted(): 원본을 변경하지 않고 정렬된 새 리스트를 반환합니다.
- 두 방법 모두 기본적으로 문자열을 사전순(오름차순)으로 정렬하며, 내림차순이 필요하면
reverse=True옵션을 사용할 수 있습니다.