Python 리스트 정렬의 기본 원리
Python에서 리스트를 정렬할 때 sort() 메서드는 해당 클래스에 정의된 __gt__(초과)와 __lt__(미만) 연산자를 사용해 요소들을 서로 비교합니다. 다행히 문자열, 숫자 등 대부분의 내장 클래스에는 이 비교 연산자가 이미 구현되어 있기 때문에, 별도의 설정 없이도 자동으로 정렬된 결과를 얻을 수 있습니다.
실제 사용 예시는 다음과 같습니다.
words = ["Hello", "World", "Foo", "Bar", "Nope"] numbers = [100, 12, 52, 354, 25] words.sort() numbers.sort() print(words) print(numbers)
위 코드를 실행하면 아래와 같은 출력 결과를 확인할 수 있습니다.
['Bar', 'Foo', 'Hello', 'Nope', 'World'] [12, 25, 52, 100, 354]
문자열은 알파벳 순서로, 숫자는 오름차순으로 각각 정렬된 것을 볼 수 있습니다.
원본 리스트를 유지하면서 정렬하기: sorted() 함수
sort() 메서드는 원본 리스트 자체를 변경(in-place 정렬)한다는 점에 유의해야 합니다. 만약 원본 리스트는 그대로 두고, 정렬된 새로운 리스트를 따로 만들고 싶다면 내장 함수인 sorted()를 사용하는 것이 좋습니다.
words = ["Hello", "World", "Foo", "Bar", "Nope"] sorted_words = sorted(words) print(words) print(sorted_words)
실행 결과는 다음과 같습니다.
["Hello", "World", "Foo", "Bar", "Nope"] ['Bar', 'Foo', 'Hello', 'Nope', 'World']
출력 결과에서 알 수 있듯이, 원본 리스트 words는 그대로 유지되고 정렬된 결과만 sorted_words라는 새로운 변수에 저장됩니다.
sort()와 sorted()의 차이점 정리
- list.sort(): 원본 리스트를 직접 수정하며, 반환값은 None입니다.
- sorted(iterable): 원본 데이터를 변경하지 않고 정렬된 새로운 리스트를 반환합니다.
메모리 사용량이 중요한 상황이라면 sort(), 원본 데이터 보존이 필요하다면 sorted()를 선택하는 것이 바람직합니다.